微信小程序維護登陸態與獲取用戶信息

前言、html

  微信小程序的運行環境不是在瀏覽器下運行的。因此不能以cookie來維護登陸態。下面我就來講說我根據官方給出的方法來寫出的維護登陸態的方法吧。算法

1、登陸態維護編程

官方的文檔地址: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便可給服務器讀取從而判斷用戶是否在登陸。是否是很簡單呢?api

2、用戶數據的加解密瀏覽器

經過wx.login()登陸以後。咱們能夠經過wx.getUserInfo()獲取用戶信息。其中一些不敏感的信息在返回的 result中的userInfo裏。如想要獲取敏感信息。openid,unionid之類的。則須要從密文中去解密獲得。緩存

而密文則在encryptedData這個字段當中。咱們去請求咱們服務器去解密而後獲得敏感信息後則能夠保存起來。安全

加密數據解密算法

接口若是涉及敏感數據(如wx.getUserInfo當中的 openId 和unionId ),接口的明文內容將不包含這些敏感數據。開發者如須要獲取敏感數據,須要對接口返回的加密數據( encryptedData )進行對稱解密。 解密算法以下:

  1. 對稱解密使用的算法爲 AES-128-CBC,數據採用PKCS#7填充。
  2. 對稱解密的目標密文爲 Base64_Decode(encryptedData),
  3. 對稱解密祕鑰 aeskey = Base64_Decode(session_key), aeskey 是16字節
  4. 對稱解密算法初始向量 iv 會在數據接口中返回。

微信官方提供了多種編程語言的示例代碼(點擊下載)。每種語言類型的接口名字均一致。調用方式能夠參照示例。

 

這時候咱們經過小程序獲得的result.encryptedData與result.iv與後端獲得的session_key 解密出咱們獲得的敏感用戶信息了。

官方給出的解密文檔:https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

相關文章
相關標籤/搜索