1.前端調用wx.login()獲取code值
2.前端通過調用wx.getUserInfo獲取iv、rawData、signature、encryptedData等加密數據,傳遞給后端
3.服務器通過code請求api--auth.code2Session,換回session_key和openid
示例代碼
(判斷用戶的openid是否在數據庫中不在就加入成為會員,再給前端發送token(隨機字符,也可以用時間戳+openid) )
4前端得到token,保存到緩存sto,
5前端發送消息到服務器時帶上token,
6服務器驗證token(如果token用時間戳,跟新時間戳,)
注:
1.Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作出相應提示,
2.Token的目的是為了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。
3. 前端調用 wx.checkSession 接口檢測當前用戶登錄態是否有效。(用戶有可能退出小程序)
登錄態過期后開發者可以再調用 wx.login 獲取新的用戶登錄態。調用成功說明當前 session_key 未過期,調用失敗說明 session_key 已過期
//開發者應在后端服務器使用getAccessToken
獲取 access_token(2小時有效)
//兩種授權機制
第一種:每次拿授權信息前,都去login拿最新的code找后端獲取數據 --token(后端自己維護)。
第二種:授權時先調用checkSession判斷session_key是否失效( ),失效重新調用wx.login。沒失效只給后端iv和data去獲取數據,后端照樣返回你數據~
session_key 是有時效性的,它的時效性就是通過 checkSession 來檢查的。因此如果 checkSession 說登錄失效了,那么通常你就需要重新進行微信授權,更新 session_key
4.服務器通過前端給的rawData 加獲取的session_key使用sha1加密,計算出signature1
5.比對前端傳的signature和自己算出來的signature1是否一致(防止數據不一致)
6.用AES算法解密encryptedData里的敏感數據
7.拿着敏感數據后做自己的邏輯
8.通知前端登陸成功
一、通過基礎接口token獲取用戶信息
1、獲取token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
2、獲取個人信息(如果不關注公眾號,返回“未關注”狀態,拉取不到更多信息)
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
二、通過社交接口token獲取用戶信息(不需要關注公眾號)
1、獲取CODE
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
參數scope 默認有2個值snsapi_base(只獲取openid)和snsapi_userinfo(可獲取更多用戶信息、頭像、昵稱等,需要用戶在網頁授權)
2、獲取token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
3、獲取用戶信息
https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID&lang=zh_CN