微信小程式維護登入態與獲取使用者資訊
前言、
微信小程式的執行環境不是在瀏覽器下執行的。所以不能以cookie來維護登入態。下面我就來說說我根據官方給出的方法來寫出的維護登入態的方法吧。
一、登入態維護
官方的文件地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
通過 wx.login()
獲取到使用者登入態之後,需要維護登入態。開發者要注意不應該直接把 session_key、openid 等欄位作為使用者的標識或者 session 的標識,而應該自己派發一個 session 登入態(請參考登入時序圖)。對於開發者自己生成的 session,應該保證其安全性且不應該設定較長的過期時間。session 派發到小程式客戶端之後,可將其儲存在 storage ,用於後續通訊使用。
登入時序圖
從上圖可以看出。當我們通過wx.login()獲取code的後,傳送給我們的伺服器,然後去請求微信伺服器換取得到對應的openid與session_key,openid是該使用者在小程式中的唯一標識用於模板通知之類的。session_key就是用來解密使用者的敏感資訊。unionid之類的。unionid是微信使用者在所有微信平臺下的唯一標識。下面我會講解一下如何得到。
以上就是我的實現方法。呼叫wx.login()得到code後請求伺服器獲取openid與session_key快取在伺服器當中。其中生成一個隨機數為key,value為openid與session_key。然後返回到小程式通過wx.setStorageSync('LoginSessionKey',得到的隨機數key)快取在小程式當中。每當我們去請求伺服器時帶上LoginSessionKey即可給伺服器讀取從而判斷使用者是否在登入。是不是很簡單呢?
二、使用者資料的加解密
通過wx.login()登入之後。我們可以通過wx.getUserInfo()獲取使用者資訊。其中一些不敏感的資訊在返回的 result中的userInfo裡。如想要獲取敏感資訊。openid,unionid之類的。則需要從密文中去解密得到。
而密文則在encryptedData這個欄位當中。我們去請求我們伺服器去解密然後得到敏感資訊後則可以儲存起來。
加密資料解密演算法
介面如果涉及敏感資料(如wx.getUserInfo
當中的 openId 和unionId ),介面的明文內容將不包含這些敏感資料。開發者如需要獲取敏感資料,需要對介面返回的加密資料(
encryptedData )進行對稱解密。 解密演算法如下:
- 對稱解密使用的演算法為 AES-128-CBC,資料採用PKCS#7填充。
- 對稱解密的目標密文為 Base64_Decode(encryptedData),
- 對稱解密祕鑰 aeskey = Base64_Decode(session_key), aeskey 是16位元組
- 對稱解密演算法初始向量 iv 會在資料介面中返回。
微信官方提供了多種程式語言的示例程式碼(點選下載)。每種語言型別的介面名字均一致。呼叫方式可以參照示例。
這時候我們通過小程式得到的result.encryptedData與result.iv與後端得到的session_key 解密出我們得到的敏感使用者資訊了。
官方給出的解密文件:https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html
相關文章
- 微信小程式授權登入獲取使用者資訊微信小程式
- ThinkPHP5-微信小程式獲取使用者授權登入資訊PHP微信小程式
- 根據微信code獲取換取使用者登入態資訊
- 微信小程式 獲取使用者資訊微信小程式
- 微信小程式獲取使用者資訊方法微信小程式
- 微信小程式 getUserProfile 獲取使用者資訊微信小程式
- Node.js 微信小程式獲取使用者資訊Node.js微信小程式
- 微信小程式三種獲取使用者資訊的方式微信小程式
- 微信開發筆記——微信網頁登入授權,獲取使用者資訊筆記網頁
- 微信小程式 獲取使用者資訊(wx.getUserInfo)調整微信小程式
- 微信小程式之登入態的探索微信小程式
- 微信開發之小程式獲取手機號授權登入
- 微信小程式登入微信小程式
- 微信小程式直播狀態介面如何獲取微信小程式
- 微信小程式使用者手機號登入微信小程式
- 企業微信-自建H5應用授權登入獲取使用者資訊H5
- 獲取微信小程式二維碼並且儲存微信小程式
- uniapp微信小程式獲取手機號 位置資訊APP微信小程式
- 微信小程式如何獲取使用者手機號微信小程式
- Laravel 微信小程式獲取『使用者詳細資訊』及『帶引數小程式碼』擴充套件Laravel微信小程式套件
- 微信小程式—— 獲取資料微信小程式
- 微信小程式登入那些事微信小程式
- 獲取小程式二維碼
- 小程式之登入態
- Spring Boot+微信小程式_儲存微信登入者的個人資訊Spring Boot微信小程式
- 微信小程式獲取當前位置微信小程式
- uniapp微信小程式獲取定位APP微信小程式
- 微信小程式獲取使用者頭像修改為圓形微信小程式
- 微信小程式的登入體系微信小程式
- 微信小程式的授權登入微信小程式
- 微信小程式手機號登入微信小程式
- App 第三方登入獲取使用者資訊 支付寶登入後端程式碼參考APP後端
- #聊聊微信小程式使用者授權登入,無感知登入,強制授權~~~微信小程式
- Spring Security - 獲取當前登入使用者的詳細資訊Spring
- 微信小程式獲取openid,unionid微信小程式
- java微信小程式獲取ACCESS_TOKENJava微信小程式
- 獲取微信小程式頁面路徑微信小程式
- 小程式獲取微信使用者繫結的手機號