鹿西鄉(xiāng)小程序如何接入和維護微信登錄態(tài)?

閱讀 20675  ·  發(fā)布日期 2020-08-24 17:26  ·  溫州優(yōu)光網(wǎng)絡科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】 為了方便小程序應用使用微信登錄態(tài)進行授權登錄,微信小程序提供了登錄授權的開放接口。乍一看文檔,感覺文檔上講的非常有道理,但是實現(xiàn)起來又真的是摸不著頭腦,不知道如何管理和維護登錄態(tài)。本文就來手把手的教會大家在業(yè)務里如何接入和維護微信登錄態(tài)。接入流程這里官方文檔上的流程圖已經(jīng)足夠清晰,我們直接就該圖展開詳述和補充。首先大家... 【溫州小程序開發(fā),溫州微信公眾號,平陽做網(wǎng)站,平陽網(wǎng)站建設公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號,山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡網(wǎng)店服務,政采云網(wǎng)店管理服務】...

小程序如何接入和維護微信登錄態(tài)?

為了方便小程序應用使用微信登錄態(tài)進行授權登錄,微信小程序提供了登錄授權的開放接口。
乍一看文檔,感覺文檔上講的非常有道理,但是實現(xiàn)起來又真的是摸不著頭腦,不知道如何管理和維護登錄態(tài)。
本文就來手把手的教會大家在業(yè)務里如何接入和維護微信登錄態(tài)。
接入流程這里官方文檔上的流程圖已經(jīng)足夠清晰,我們直接就該圖展開詳述和補充。
首先大家看到這張圖,肯定會注意到小程序進行通信交互的不止是小程序前端和我們自己的服務端,微信第三方服務端也參與其中,那么微信服務端在其中扮演著怎樣的角色呢?我們一起來串一遍登錄鑒權的流程就明白了。
1. 調用wx.login生成codewx.login()這個API的作用就是為當前用戶生成一個臨時的登錄憑證,這個臨時登錄憑證的有效期只有五分鐘。
我們拿到這個登錄憑證后就可以進行下一步操作:
獲取openid和session_keywx.login({
success: function(loginRes) {
if (loginRes.code) {
// example: 081LXytJ1Xq1Y40sg3uJ1FWntJ1LXyth }
}
}
);
2. 獲取openid和session_key我們先來介紹下openid,用過公眾號的童鞋應該對這個標識都不陌生了,在公眾平臺里,用來標識每個用戶在訂閱號、服務號、小程序這三種不同應用的唯一標識,也就是說每個用戶在每個應用的openid都是不一致的,所以在小程序里,我們可以用openid來標識用戶的唯一性。
那么session_key是用來干嘛的呢?有了用戶標識,我們就需要讓該用戶進行登錄,那么session_key就保證了當前用戶進行會話操作的有效性,這個session_key是微信服務端給我們派發(fā)的。
也就是說,我們可以用這個標識來間接地維護我們小程序用戶的登錄態(tài),那么這個session_key是怎么拿到的呢?我們需要在自己的服務端請求微信提供的第三方接口https://api.weixin.qq.com/sns/jscode2session,這個接口需要帶上四個參數(shù)字段:
從這幾個參數(shù),我們可以看出,要請求這個接口必須先調用wx.login()來獲取到用戶當前會話的code。
那么為什么我們要在服務端來請求這個接口呢?其實是出于安全性的考量,如果我們在前端通過request調用此接口,就不可避免的需要將我們小程序的appid和小程序的secret暴露在外部,同時也將微信服務端下發(fā)的session_key暴露給“有心之人”,這就給我們的業(yè)務安全帶來極大的風險。
除了需要在服務端進行session_key的獲取,我們還需要注意兩點:
session_key和微信派發(fā)的code是一一對應的,同一code只能換取一次session_key。
每次調用wx.login(),都會下發(fā)一個新的code和對應的session_key,為了保證用戶體驗和登錄態(tài)的有效性,開發(fā)者需要清楚用戶需要重新登錄時才去調用wx.login()session_key是有失效性的,即便是不調用wx.login,session_key也會過期,過期時間跟用戶使用小程序的頻率成正相關,但具體的時間長短開發(fā)者和用戶都是獲取不到的function getSessionKey (code, appid, appSecret) {
var opt = {
method: '
GET'
, url: '
https://api.weixin.qq.com/sns/jscode2session'
, params: {
appid: appid, secret: appSecret, js_code: code, grant_type: '
authorization_code'
}
}
;
return http(opt).then(function (response) {
var data = response.data;
if (!data.openid || !data.session_key || data.errcode) {
return {
result: -2, errmsg: data.errmsg || '
返回數(shù)據(jù)字段不完整'
}
}
else {
return data }
}
);
}
3. 生成3rd_session前面說過通過session_key來“間接”地維護登錄態(tài),所謂間接,也就是我們需要自己維護用戶的登錄態(tài)信息,這里也是考慮到安全性因素,如果直接使用微信服務端派發(fā)的session_key來作為業(yè)務方的登錄態(tài)使用,會被“有心之人”用來獲取用戶的敏感信息,比如wx.getUserInfo()這個接口呢,就需要session_key來配合解密微信用戶的敏感信息。
那么我們如果生成自己的登錄態(tài)標識呢,這里可以使用幾種常見的不可逆的哈希算法,比如md5、sha1等,將生成后的登錄態(tài)標識(這里我們統(tǒng)稱為'
skey'
)返回給前端,并在前端維護這份登錄態(tài)標識(一般是存入storage)。
而在服務端呢,我們會把生成的skey存在用戶對應的數(shù)據(jù)表中,前端通過傳遞skey來存取用戶的信息。
可以看到這里我們使用了sha1算法來生成了一個skey:
const crypto = require('
crypto'
);
return getSessionKey(code, appid, secret) .then(resData => {
// 選擇加密算法生成自己的登錄態(tài)標識 const {
session_key }
= resData;
const skey = encryptSha1(session_key);
}
);
function encryptSha1(data) {
return crypto.createHash('
sha1'
).update(data, '
utf8'
).digest('
hex'
) }
4. checkSession前面我們將skey存入前端的storage里,每次進行用戶數(shù)據(jù)請求時會帶上skey,那么如果此時session_key過期呢?所以我們需要調用到wx.checkSession()這個API來校驗當前session_key是否已經(jīng)過期,這個API并不需要傳入任何有關session_key的信息參數(shù),而是微信小程序自己去調自己的服務來查詢用戶最近一次生成的session_key是否過期。
如果當前session_key過期,就讓用戶來重新登錄,更新session_key,并將最新的skey存入用戶數(shù)據(jù)表中。
checkSession這個步驟呢,我們一般是放在小程序啟動時就校驗登錄態(tài)的邏輯處,這里貼個校驗登錄態(tài)的流程圖:
下面代碼即校驗登錄態(tài)的簡單流程:
let loginFlag = wx.getStorageSync('
skey'
);
if (loginFlag) {
// 檢查 session_key 是否過期 wx.checkSession({
// session_key 有效(未過期) success: function() {
// 業(yè)務邏輯處理 }
, // session_key 過期 fail: function() {
// session_key過期,重新登錄 doLogin();
}
}
);
) else {
// 無skey,作為首次登錄 doLogin();
}
推薦:
《小程序開發(fā)教程》以上就是小程序如何接入和維護微信登錄態(tài)?的詳細內容,更多請關注php中文網(wǎng)其它相關文章!
微信
分享相關標簽:
小程序本文轉載于:
即速資訊,如有侵犯,請聯(lián)系[email protected]刪除
上一篇:
如何開發(fā)小程序插件?
下一篇:
小程序的21個新功能相關文章相關視頻為什么微信小程序打開來會黑屏微信小程序怎么實現(xiàn)購物車功能?(方法介紹)小程序中下拉刷新頁面的功能怎么實現(xiàn)?如何配置小程序開發(fā)項目結構?(教程)小程序如何接入和維護微信登錄態(tài)?認識小程序開發(fā)工具認識小程序的目錄結構小程序文檔 [溫州做小程序]