您當前位置>首頁 » 新聞資(zī)訊 » 小程序相關(guān) >
微信小程序實現微信登錄
發表時間:2020-9-26
發布人:葵宇科技
浏覽次數:54
小程序登錄
小程序可(kě)以通(tōng)過微信官方提供的登錄能力方便地獲取微信提供的用戶身份标識,快速建立小程序内的用戶體系。
登錄流程時序
說明: 調用 wx.login() 獲取 臨時登錄憑證 code ,并回傳到開發者服務器(qì)。調用 auth.code2Session 接口,換取 用戶唯一标識 OpenID 和(hé) 會話密鑰 session_key。之後開發者服務器(qì)可(kě)以根據用戶标識來生成自定義登錄态,用于後續業(yè)務邏輯中(zhōng)前後端交互時識别用戶身份。 注意:會話密鑰 session_key 是對用戶數據進行 加密簽名 的密鑰。為了應用自身的數據安全,開發者服務器(qì)不應該把會話密鑰下(xià)發到小程序,也不應該對外提供這個(gè)密鑰。臨時登錄憑證 code 隻能使用一次
小程序登錄态
對于小程序來說,也需要一個(gè)唯一的标識符來區分用戶,也就是session來保持會話,但是小程序沒有cookie, 因此我們的唯一标識符會被存儲在 localstorage 裡面,每次發請求時,都會從localStorage 裡面拿到這個(gè)唯一标識符,帶在請求中(zhōng)。
微信的openid和(hé)code
在日常開發中(zhōng),我們也經常聽到 openid 和(hé) code 的概念。
openid 用來标識這個(gè)唯一的微信用戶,也就是說,一個(gè)微信用戶相對于一個(gè)公衆号(主體)的 openid 是唯一的,是不會變的。
那麼我們如(rú)何才能知道 某一個(gè)用戶的 openid 呢(ne)?
就是通(tōng)過 code, 對于同一個(gè)用戶,每次獲取到的 code 都會改變,有有效期。我們把 code 作為參數,調用指定的微信服務器(qì)的接口,就可(kě)以拿到用戶的 openid 。
那麼我們如(rú)何才能拿到 code 呢(ne)?
- 微信内h5頁面的方法是:跳到指定的微信的承接頁面,再跳回到本頁面,url鍊接上就會被拼上 code 。
- 小程序的方法是: 通(tōng)過調用 wx.login() 方法,就可(kě)以拿到用戶的 code
微信小程序登錄體系
- 通(tōng)過 wx.login() 獲取到用戶的code
- 通(tōng)過 wx.request() 方法請求我們自己的後端,我們自己的服務端把 appid , appsecret 和(hé) code 一起發送到微信服務器(qì)。 appid 和(hé) appsecret 都是微信提供的,可(kě)以在管理員後台找到
- 微信服務器(qì)返回了 openid
- 我們在自己的數據庫中(zhōng),查找 openid ,如(rú)果沒有查到記錄,說明該用戶沒有注冊,如(rú)果有記錄,則繼續往下(xià)走
- 我們生成一個(gè)第三方 session , 也就是 session_id , 也就是用戶唯一标識符。在 redis 中(zhōng),把 session_id 和(hé)用戶的身份存進去。
- 返回 3rd_session
- 小程序把 3rd_session 存到 storage 裡面
- 下(xià)次請求時,先從 storage 裡面讀取,然後帶給服務端
- 服務端從 redis 裡面找到 3rd_session 對應的記錄,然後校(xiào)驗有效期