01. pigx微信小程序登錄流程


01. pigx微信小程序登錄流程

pigx配置小程序信息

訪問pigx配置小程序信息,在這個頁面中我們配置了pigx小程序的appIdappSecret

然后根據文檔的說明,會經歷以下幾個步驟

  1. 小程序端wx.login返回 code 調用 pigx 獲取 token。
  2. 若 pigx 返回200 & access_token,小程序端保存access_token,調用服務端API使用
  3. 若 pigx 返回401則未綁定,跳轉綁定功能
    1. 使用短信驗證碼模式登錄獲取 token
    2. 小程序端再次wx.login獲取 code
    3. 調用綁定接口,實現用戶&&openid 綁定

pigx流程一覽

根據上面的步驟,一共有四個接口會進行調用

  1. 小程序端調用wx.login返回 code,調用http://pigx.com/auth/mobile/token/social?grant_type=mobile&mobile=MINI@{微信返回的code}獲取 token
  2. 如果手機號和 openid 進行過綁定,則可以正常獲取到 token,然后用戶就能用token來做后續的事情了。如果手機號和 openid 沒有綁定過,則調用http://pigx.com/admin/mobile/{手機號碼}獲取短信驗證碼
  3. 根據短信驗證碼,調用http://pigx.com/auth/mobile/token/sms?mobile=SMS@{手機號碼}&code={短信驗證碼}&grant_type=mobile,獲取token
  4. 使用獲取的token,調用http://pigx.com/admin/social/bind?state=MINI&code={微信返回的code},將token與code進行綁定

/mobile/token/social 流程

首先,因為url是以/auth開頭,所以該請求會被網關pigx-gateway模塊發送到pigx-auth模塊

然后該請求會被com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationFilter攔截,因為這個過濾器監聽了/mobile/token/*,這個過濾器取出了MINI@{微信返回的code},並將這個塞入到MobileAuthenticationToken里面,然后交給認證管理器去進行認證

不知道它怎么運行的,它來到了com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationProvider#authenticate,在這個方法里面,它沒有辦法直接處理MINI@{微信返回的code},所以它將這個發送給upms模塊,交給該模塊的/social/info/{inStr}進行處理

upms模塊的com.pig4cloud.pigx.admin.controller.SysSocialDetailsController#getUserInfo方法里面,將MINI@{微信返回的code}這個串拆分成MINI{微信返回的code}這兩部分,然后用com.pig4cloud.pigx.admin.handler.AbstractLoginHandler#handle來進行處理

AbstractLoginHandler#handle方法,會從數據庫中將小程序中的app_idapp_secret取出來,然后結合{微信返回的code},調用微信的jscode2session獲取 openid,使用這個 openid 去用戶表里面搜索用戶信息

如果查詢到用戶信息,則將這個用戶信息返回回com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationProvider#authenticate,然后返回正確的token

如果查詢不到則給小程序返回401未認證

/mobile/{手機號碼} 流程

上一步如果用戶沒有綁定過 openid,則小程序需要將手機號碼發送給應用

這個url是以/admin開頭的,所以這個請求會被發送到pigx-upms模塊

在這個模塊的com.pig4cloud.pigx.admin.controller.MobileController#sendSmsCode方法里面,pigx會將短信驗證碼發送給小程序,小程序打開控制台,能夠看到相應的短信驗證碼信息

這個短信驗證碼同時被記錄到了redis里面,以便后續進行校驗

因為pigx暫時是測試版本的,所以它沒有發送短信。實際生產環境是不能把短信驗證碼返回給小程序,而應該將短信驗證碼通過短信的方式發送給用戶

/mobile/token/sms 流程

得到短信驗證碼之后,小程序端請求該接口,將手機號碼和openid進行綁定

因為請求的是以/auth開頭的,所以這個請求會被發送到pigx-auth模塊

/mobile/token/social相似,這個請求也會被MobileAuthenticationFilter攔截,然后進入到com.pig4cloud.pigx.common.security.mobile.MobileAuthenticationProvider#authenticate

MobileAuthenticationProvider里面,驗證碼也會通過feign發送到pigx-upms模塊里面,然后驗證
手機驗證碼是否正確,正確的話返回token給小程序

/social/bind 流程

前面已經獲取到token了,然后調用pigx-upms模塊里面的com.pig4cloud.pigx.admin.controller.SysSocialDetailsController#bindSocial方法

在這個方法里面,首先會調用identify驗證微信返回的code是否正確,如果正確的話能夠獲取到openid,然后將這個openid寫入到已登錄用戶的賬號里面

至此完成小程序綁定功能

以后小程序端再進行登錄的時候,因為openid已經綁定過了,所以可以通過openid查出這個用戶,將用戶信息對應的token返回給小程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM