使用button引導(dǎo)登錄
<button open-type="getUserInfo" bindgetuserinfo="xxx" withCredentials></button>
xxx(){
wx.login({
success(res){
console.log(res.code)
}
})
}
每次點(diǎn)擊登錄按鈕,經(jīng)常第一次失敗,報500,然后第二次就OK了
原因:
wx.login 每次都會刷新 session_key,session_key 是服務(wù)端用于解密數(shù)據(jù)的關(guān)鍵信息。
button 的信息授權(quán)信息獲取后,我用 wx.login 刷新 session_key,導(dǎo)致原先session_key 失效,匹配不上,解密失敗。
我的解決方法:
在onShow時,就調(diào)用一次 wx.login,拿到 code
當(dāng)用戶點(diǎn)擊按鈕,執(zhí)行一次 wx.checkSession ,如果session_key 未過期,就直接用這個code
如果過期,就重新 wx.login,并重新用wx.getUserInfo()獲取用戶信息
官方說法:
wx.login 會刷新session_key。
在userinfo button回調(diào)內(nèi)調(diào)用wx.login,開發(fā)者獲取到session_key是刷新后的session_key,
而userinfo是以刷新前session_key做加密的。所以會解密失敗。
建議開發(fā)者在獲取userinfo等加密數(shù)據(jù)前,調(diào)用wx.login 并對session_key做好維護(hù)。
另外提醒:在用戶確認(rèn)授權(quán)后,開發(fā)者可以通過 wx.getUserInfo 獲取最新的數(shù)據(jù)。