微信小程式中使用者登入和登入態維護

2022-02-22 21:58:14 字數 1647 閱讀 5222

讓使用者登入,標識使用者和獲取使用者資訊,以使用者為核心提供服務,是大部分小程式都會做的事情。我們今天就來了解下在小程式中,如何做使用者登入,以及如何去維護這個登入後的會話(session)狀態。

引用小程式官方文件的登入流程圖,整個登入流程基本如下圖所示:

登入流程圖

下面我們來逐步分解一下這個流程圖。

在小程式中登入的第一步,就是先獲取登入憑證。我們可以使用wx.login()方法並得到乙個登入憑證。

1

2 onlaunch: function

() else11}

12});13}

14})

首先,我們使用wx.request()方法,請求我們自己實現的乙個後台api,並將登入憑證(code)攜帶過去,例如在我們前面**的基礎上增加:

1

2 onlaunch: function

() 13

})14

//------------------------------------

1516 } else19}

20});21}

22 })

這裡是我使用了node.js express構建的後台服務的**,僅供參考:

1 router.get('/wx/onlogin', function

(req, res, next)

13 }, (err, response, data) =>)

22 } else

26})

27 })

關於如何在伺服器端做這個session機制,我們現在一般採用鍵值對儲存工具來做,比如redis。我們為每個session生成乙個唯一的字串作為鍵,然後可以將session_key和openid作為值,存入redis中,為了安全,存入的時候還應設定乙個超時的時間。

步驟3:在客戶端儲存sessionid

開發web應用的時候,在客戶端(瀏覽器)中,我們通常將session id存放在cookie中,但是小程式沒有cookie機制,所以不能採用cookie了,但是小程式有本地的storage,所以我們可以使用storage來儲存sessionid,以供後續的後台api呼叫所使用。

在之後,呼叫那些需要登入後才有許可權的訪問的後台服務時,你可以將儲存在storage中的sessionid取出並攜帶在請求中(可以放在header中攜帶,也可以放在querystring中,或是放在body中,根據你自己的需要來使用),傳遞到後台服務,後台**中獲取到該sessionid後,從redis中查詢是否有該sessionid存在,存在的話,即確認該session是有效的,繼續後續的**執行,否則進行錯誤處理。

這是乙個需要session驗證的後台服務示例,我的sessionid是放在header中傳遞的,所以在這個示例中,是從請求的header中獲取sessionid:

router.get('/wx/products/list', function

(req, res, next) else

})

文章出處:一斤**大神

微信小程式登入流程 微信登入

提高使用者體驗 制定產品策略 token 登入態是個邏輯詞彙,token可以理解為登入態的具象化 資料化,在上面的流程圖中,可以看到token是由開發者伺服器建立的乙個字元,而且需要跟openid和session key相關聯,關聯完成之後開發者伺服器將 token下發到客戶端,客戶端儲存在本地,後...

微信小程式開發使用者授權登入

用wx.login獲取登入憑證code 這個玩家很懶,什麼也沒留下 小程式端 wx.login 獲取code 並 wx.request 提交 code 給己方伺服器 小程式端 wx.setstorage 儲存 3rd session 在後續使用者操作需要憑證時 附帶該引數 小程式端 wx.getus...

微信小程式登入和授權

登入和授權的說明 登入和授權完全沒有關係 注意使用者資訊授權 服務端解密使用者授權資料 手機號授權 注意事項 在 中呼叫wx.login登入,可能會重新整理登入態。此時伺服器使用code換取的sessionkey不是加密時使用的sessionkey,導致解密失敗。建議開發者提前進行login 或者在...