微信小程序獲取用戶信息并保存登錄狀態(tài)詳解
前言
微信小程序的運行環(huán)境不是在瀏覽器下運行的。所以不能以cookie來維護登錄態(tài)。下面我就來說說我根據(jù)官方給出的方法來寫出的維護登錄態(tài)的方法吧。
一、登錄態(tài)維護
官方的文檔地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
通過 wx.login() 獲取到用戶登錄態(tài)之后,需要維護登錄態(tài)。開發(fā)者要注意不應該直接把 session_key、openid 等字段作為用戶的標識或者 session 的標識,而應該自己派發(fā)一個 session 登錄態(tài)(請參考登錄時序圖)。對于開發(fā)者自己生成的 session,應該保證其安全性且不應該設置較長的過期時間。session 派發(fā)到小程序客戶端之后,可將其存儲在 storage ,用于后續(xù)通信使用。
登錄時序圖
從上圖可以看出。當我們通過wx.login()獲取code的后,發(fā)送給我們的服務器,然后去請求微信服務器換取得到對應的openid與session_key,openid是該用戶在小程序中的唯一標識用于模板通知之類的。session_key就是用來解密用戶的敏感信息。unionid之類的。unionid是微信用戶在所有微信平臺下的唯一標識。下面我會講解一下如何得到。
以上就是我的實現(xiàn)方法。調(diào)用wx.login()得到code后請求服務器獲取openid與session_key緩存在服務器當中。其中生成一個隨機數(shù)為key,value為openid與session_key。然后返回到小程序通過wx.setStorageSync('LoginSessionKey',得到的隨機數(shù)key)緩存在小程序當中。每當我們?nèi)フ埱蠓掌鲿r帶上LoginSessionKey即可給服務器讀取從而判斷用戶是否在登錄。是不是很簡單呢?
二、用戶數(shù)據(jù)的加解密
通過wx.login()登錄之后。我們可以通過wx.getUserInfo()獲取用戶信息。其中一些不敏感的信息在返回的 result中的userInfo里。如想要獲取敏感信息。openid,unionid之類的。則需要從密文中去解密得到。
而密文則在encryptedData這個字段當中。我們?nèi)フ埱笪覀兎掌魅ソ饷苋缓蟮玫矫舾行畔⒑髣t可以保存起來。
加密數(shù)據(jù)解密算法
接口如果涉及敏感數(shù)據(jù)(如wx.getUserInfo當中的 openId 和unionId ),接口的明文內(nèi)容將不包含這些敏感數(shù)據(jù)。開發(fā)者如需要獲取敏感數(shù)據(jù),需要對接口返回的加密數(shù)據(jù)( encryptedData )進行對稱解密。 解密算法如下:
- 對稱解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充。
- 對稱解密的目標密文為 Base64_Decode(encryptedData),
- 對稱解密秘鑰 aeskey = Base64_Decode(session_key), aeskey 是16字節(jié)
- 對稱解密算法初始向量 iv 會在數(shù)據(jù)接口中返回。
微信官方提供了多種編程語言的示例代碼(點擊下載)。每種語言類型的接口名字均一致。調(diào)用方式可以參照示例。
這時候我們通過小程序得到的result.encryptedData與result.iv與后端得到的session_key 解密出我們得到的敏感用戶信息了。
官方給出的解密文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
以上所述是小編給大家介紹的微信小程序獲取用戶信息并保存登錄狀態(tài)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作
這篇文章主要介紹了js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作,即編寫一個js向左滑動刪除 交互特效的插件,感興趣的小伙伴們可以參考一下2016-04-04關于Object.entries()方法的使用和實現(xiàn)方式
這篇文章主要介紹了關于Object.entries()方法的使用和實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02微信小程序?qū)崿F(xiàn)modal彈出框遮罩層組件(可帶文本框)
這篇文章主要給大家介紹了關于微信小程序?qū)崿F(xiàn)modal彈出框遮罩層組件(可帶文本框)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12javascript attachEvent和addEventListener使用方法
attachEvent與addEventListener區(qū)別 適應的瀏覽器版本不同,同時在使用的過程中要注意2009-03-03分享5個小技巧讓你寫出更好的 JavaScript 條件語句
在使用 JavaScript 時,我們常常要寫不少的條件語句。這里有五個小技巧,可以讓你寫出更干凈、漂亮的條件語句。需要的朋友跟隨小編一起學習吧2018-10-10如何用JavaScript實現(xiàn)功能齊全的單鏈表詳解
這篇文章主要給大家介紹了關于如何用JavaScript實現(xiàn)功能齊全的單鏈表的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-02-02