淺析微信小程序登錄與授權 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

淺析微信小程序登錄與授權

發表時間:2020-10-10

發布人:葵宇科技

浏覽次數:54

淺析微信小程序登錄與授權

很多人會把微信小程序的登錄和(hé)授權搞混淆。

微信小程序登錄

其實微信小程序的登錄作用就跟傳統的帳号密碼登錄一樣,隻是不用用戶手工輸入帳号密碼。

小程序登錄過程分兩部分交互:

  1. 小程序向開發者服務器(qì)請求登錄

code ===> token(自定義登錄态)

  1. 開發者服務器(qì)向微信接口服務器(qì)請求登錄

appid + appsecret + code ===> openid + session_key

我們可(kě)以把調用wx.login()返回的code當成傳統登錄的帳号。

而密碼呢(ne),則是由開發者服務器(qì)與微信接口服務器(qì)驗證這一步替代。

返回的自定義登錄态就是傳統登錄的token了。

code:登錄憑證(帳号)由wx.login()獲得

appid + appsecret:相當于密碼

session_key:微信接口返回的token

openid:用戶标識,相當于帳号

自定義登錄态:開發者服務生成并發送給小程序端的token,用于标識用戶是否已經登錄并在每個(gè)交互請求中(zhōng)攜帶,用于開發者服務器(qì)識别用戶。

以下(xià)為微信官方幫助的登錄流程圖:

微信小程序登錄流程

這裡大家可(kě)能會有幾個(gè)問(wèn)題

  1. session_key有什麼用?

    session_key用于解密返回的加密數據

    1. wx.getUserInfo()
    2. 獲取用戶手機号碼
  2. session_key的有效期是多長?

    通(tōng)過 wx.login 接口獲得的用戶登錄态擁有一定的時效性。

    用戶越久未使用小程序,用戶登錄态越有可(kě)能失效。

    反之如(rú)果用戶一直在使用小程序,則用戶登錄态一直保持有效。

    具體時效邏輯由微信維護,對開發者透明。

    調用wx.login(),會讓之前的session_key失效,因此每次調用wx.login()後都要把code發送到服務器(qì)端更新session_key

  3. 自定義登錄态應該怎麼設置有效期?

    自定義登錄态其實跟session_key沒什麼關(guān)系,有效期的設置就跟傳統的session那樣設置就可(kě)以。

  4. 什麼時候調用wx.login()?

    因為調用wx.login()的目的是獲取code,從而更新服務器(qì)的session_key,所以當session_key登錄态失效時調用。

  5. 什麼時候調用wx.checkSession()?

    因為wx.checkSession()的作用是檢查登錄态(session_key)是否失效,所以結合1,4兩點,在以下(xià)情況下(xià)應該調用wx.checkSession()

    1. 在獲取用戶信息或用戶手機号碼之前
    2. 在其他的服務器(qì)需要使用到session_key進行解密數據的情況下(xià)
  6. 如(rú)何處理小程序登錄流程?(以下(xià)token為自定義登錄态)

    1. 用戶未登陸(本地無token)、token失效或微信登錄态失效
    2. 調用wx.login()獲取code,發送到開發服務器(qì)
    3. 開發服務器(qì)使用appid + appsecret + code 向微信接口服務器(qì)獲取openid+session_key
    4. 開發服務器(qì)生成token,并建立token、openid、session_key的關(guān)聯
    5. 開發服務器(qì)返回token給小程序端,小程序端保存toke到本地緩存(storage,數據庫等)
  7. 如(rú)何處理檢查登錄态流程?

    1. 有加密數據要發送到服務器(qì)進行解密操作,如(rú)獲取用戶信息,獲取用戶手機号碼等
    2. 調用wx.checkSession()
    3. 如(rú)果登錄态有效,轉5
    4. 如(rú)果登錄态失效,調用wx.login()走小程序登錄流程,登陸成功後轉5
    5. 發起服務器(qì)請求發送加密數據給服務器(qì)解密
  8. 常見處理流程

    以下(xià)請求都帶本地保存的token

    1. 不需登錄的請求

      1. 直接請求
    2. 需要登錄的請求

      1. 直接請求,返回未登錄狀态
      2. 執行小程序登錄流程,保存本地token
      3. 重新請求
    3. 需要處理解密數據的請求

      這裡有兩種處理方式(建議使用第一種):

      1. 一進入頁面就進行用戶登錄狀态和(hé)微信登錄态的檢查
      2. 用戶操作getUserInfo,getPhoneNumber等操作的回調函數中(zhōng)做用戶登錄狀态和(hé)微信登錄态的檢查

      處理方式一

      1. 檢查是否登錄
        1. 未登錄(本地token為空或接口返回token失效)則執行小程序登錄流程,本地保存最新token【這時微信登錄态是有效的,因為這過程重新獲取了session_key】
        2. 已登錄(本地token不為空且接口返回token未失效),則不執行小程序登錄流程。【這時還不知道微信登錄态是否失效】
      2. 檢查登錄态
        1. 登錄态失效,執行小程序登錄流程。
        2. 登錄态有效,不操作。
      3. 等待用戶操作getUserInfo,getPhoneNumber等操作
      4. 用戶操作回調方法中(zhōng)把加密數據發送到服務器(qì)進行解密

      處理方式二

      1. 等待用戶操作getUserInfo,getPhoneNumber等操作
      2. 檢查是否登錄
        1. 未登錄(本地token為空或接口返回token失效)則執行小程序登錄流程,本地保存最新token【這時微信登錄态是有效的,因為這過程重新獲取了session_key】
        2. 已登錄(本地token不為空且接口返回token未失效),則不執行小程序登錄流程。【這時還不知道微信登錄态是否失效】
      3. 檢查登錄态
        1. 登錄态失效,執行小程序登錄流程。
        2. 登錄态有效,不操作。
      4. 如(rú)果2,3步驟中(zhōng)有執行過小程序登陸流程,則提示用戶重新點擊,轉到1
      5. 把加密數據發送到服務器(qì)進行解密

微信小程序授權

為什麼要授權?

在與用戶交互的過程中(zhōng),我們需要獲取并記錄用戶的一些信息,以提供個(gè)性化的服務,而這些用戶信息涉及到隐私,這時候就需要用戶授權同意使用這些信息。

獲取信息的流程

  1. 檢查用戶是否已經授權

    調用wx.getSetting(),如(rú)果已授權,轉3,如(rú)果未授權,轉2

  2. 引導用戶授權

    展現授權按鈕,用戶點擊并同意

  3. 獲取用戶信息

    調用對應的信息獲取接口或在用戶點擊按鈕的回調事件中(zhōng)獲取用戶信息

    如(rú) wx.getUserInfo(),wx.getLocation()

授權是不是一定要登錄?

授權并不需要微信登錄,但很多時候授權獲取用戶信息時,獲取到的信息需要進行解密,這時需要有效的 session_key,所以當 session_key失效時,就需要重新執行微信登錄來更新session_key。

反之,登錄也并不需要授權,隻有在需要獲取用戶信息時才需要授權。

換手機登錄微信會發生什麼?

token失效,因為token保存在本地,換手機後沒有原手機上保存的token,或跟原手機的token不一樣

微信登錄态不變,如(rú)果還在有效期内,換手機後調用wx.checkSession()仍然會返回有效

相關(guān)案例查看更多