欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

淺析微信小程序登錄與授權(quán) - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >

淺析微信小程序登錄與授權(quán)

發(fā)表時(shí)間:2020-10-10

發(fā)布人:葵宇科技

瀏覽次數(shù):68

淺析微信小程序登錄與授權(quán)

很多人會(huì)把微信小程序的登錄和授權(quán)搞混淆。

微信小程序登錄

其實(shí)微信小程序的登錄作用就跟傳統(tǒng)的帳號(hào)密碼登錄一樣,只是不用用戶(hù)手工輸入帳號(hào)密碼。

小程序登錄過(guò)程分兩部分交互:

  1. 小程序向開(kāi)發(fā)者服務(wù)器請(qǐng)求登錄

code ===> token(自定義登錄態(tài))

  1. 開(kāi)發(fā)者服務(wù)器向微信接口服務(wù)器請(qǐng)求登錄

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

我們可以把調(diào)用wx.login()返回的code當(dāng)成傳統(tǒng)登錄的帳號(hào)。

而密碼呢,則是由開(kāi)發(fā)者服務(wù)器與微信接口服務(wù)器驗(yàn)證這一步替代。

返回的自定義登錄態(tài)就是傳統(tǒng)登錄的token了。

code:登錄憑證(帳號(hào))由wx.login()獲得

appid + appsecret:相當(dāng)于密碼

session_key:微信接口返回的token

openid:用戶(hù)標(biāo)識(shí),相當(dāng)于帳號(hào)

自定義登錄態(tài):開(kāi)發(fā)者服務(wù)生成并發(fā)送給小程序端的token,用于標(biāo)識(shí)用戶(hù)是否已經(jīng)登錄并在每個(gè)交互請(qǐng)求中攜帶,用于開(kāi)發(fā)者服務(wù)器識(shí)別用戶(hù)。

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

微信小程序登錄流程

這里大家可能會(huì)有幾個(gè)問(wèn)題

  1. session_key有什么用?

    session_key用于解密返回的加密數(shù)據(jù)

    1. wx.getUserInfo()
    2. 獲取用戶(hù)手機(jī)號(hào)碼
  2. session_key的有效期是多長(zhǎng)?

    通過(guò) wx.login 接口獲得的用戶(hù)登錄態(tài)擁有一定的時(shí)效性。

    用戶(hù)越久未使用小程序,用戶(hù)登錄態(tài)越有可能失效。

    反之如果用戶(hù)一直在使用小程序,則用戶(hù)登錄態(tài)一直保持有效。

    具體時(shí)效邏輯由微信維護(hù),對(duì)開(kāi)發(fā)者透明。

    調(diào)用wx.login(),會(huì)讓之前的session_key失效,因此每次調(diào)用wx.login()后都要把code發(fā)送到服務(wù)器端更新session_key

  3. 自定義登錄態(tài)應(yīng)該怎么設(shè)置有效期?

    自定義登錄態(tài)其實(shí)跟session_key沒(méi)什么關(guān)系,有效期的設(shè)置就跟傳統(tǒng)的session那樣設(shè)置就可以。

  4. 什么時(shí)候調(diào)用wx.login()?

    因?yàn)檎{(diào)用wx.login()的目的是獲取code,從而更新服務(wù)器的session_key,所以當(dāng)session_key登錄態(tài)失效時(shí)調(diào)用。

  5. 什么時(shí)候調(diào)用wx.checkSession()?

    因?yàn)閣x.checkSession()的作用是檢查登錄態(tài)(session_key)是否失效,所以結(jié)合1,4兩點(diǎn),在以下情況下應(yīng)該調(diào)用wx.checkSession()

    1. 在獲取用戶(hù)信息或用戶(hù)手機(jī)號(hào)碼之前
    2. 在其他的服務(wù)器需要使用到session_key進(jìn)行解密數(shù)據(jù)的情況下
  6. 如何處理小程序登錄流程?(以下token為自定義登錄態(tài))

    1. 用戶(hù)未登陸(本地?zé)otoken)、token失效或微信登錄態(tài)失效
    2. 調(diào)用wx.login()獲取code,發(fā)送到開(kāi)發(fā)服務(wù)器
    3. 開(kāi)發(fā)服務(wù)器使用appid + appsecret + code 向微信接口服務(wù)器獲取openid+session_key
    4. 開(kāi)發(fā)服務(wù)器生成token,并建立token、openid、session_key的關(guān)聯(lián)
    5. 開(kāi)發(fā)服務(wù)器返回token給小程序端,小程序端保存toke到本地緩存(storage,數(shù)據(jù)庫(kù)等)
  7. 如何處理檢查登錄態(tài)流程?

    1. 有加密數(shù)據(jù)要發(fā)送到服務(wù)器進(jìn)行解密操作,如獲取用戶(hù)信息,獲取用戶(hù)手機(jī)號(hào)碼等
    2. 調(diào)用wx.checkSession()
    3. 如果登錄態(tài)有效,轉(zhuǎn)5
    4. 如果登錄態(tài)失效,調(diào)用wx.login()走小程序登錄流程,登陸成功后轉(zhuǎn)5
    5. 發(fā)起服務(wù)器請(qǐng)求發(fā)送加密數(shù)據(jù)給服務(wù)器解密
  8. 常見(jiàn)處理流程

    以下請(qǐng)求都帶本地保存的token

    1. 不需登錄的請(qǐng)求

      1. 直接請(qǐng)求
    2. 需要登錄的請(qǐng)求

      1. 直接請(qǐng)求,返回未登錄狀態(tài)
      2. 執(zhí)行小程序登錄流程,保存本地token
      3. 重新請(qǐng)求
    3. 需要處理解密數(shù)據(jù)的請(qǐng)求

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

      1. 一進(jìn)入頁(yè)面就進(jìn)行用戶(hù)登錄狀態(tài)和微信登錄態(tài)的檢查
      2. 用戶(hù)操作getUserInfo,getPhoneNumber等操作的回調(diào)函數(shù)中做用戶(hù)登錄狀態(tài)和微信登錄態(tài)的檢查

      處理方式一

      1. 檢查是否登錄
        1. 未登錄(本地token為空或接口返回token失效)則執(zhí)行小程序登錄流程,本地保存最新token【這時(shí)微信登錄態(tài)是有效的,因?yàn)檫@過(guò)程重新獲取了session_key】
        2. 已登錄(本地token不為空且接口返回token未失效),則不執(zhí)行小程序登錄流程?!具@時(shí)還不知道微信登錄態(tài)是否失效】
      2. 檢查登錄態(tài)
        1. 登錄態(tài)失效,執(zhí)行小程序登錄流程。
        2. 登錄態(tài)有效,不操作。
      3. 等待用戶(hù)操作getUserInfo,getPhoneNumber等操作
      4. 用戶(hù)操作回調(diào)方法中把加密數(shù)據(jù)發(fā)送到服務(wù)器進(jìn)行解密

      處理方式二

      1. 等待用戶(hù)操作getUserInfo,getPhoneNumber等操作
      2. 檢查是否登錄
        1. 未登錄(本地token為空或接口返回token失效)則執(zhí)行小程序登錄流程,本地保存最新token【這時(shí)微信登錄態(tài)是有效的,因?yàn)檫@過(guò)程重新獲取了session_key】
        2. 已登錄(本地token不為空且接口返回token未失效),則不執(zhí)行小程序登錄流程?!具@時(shí)還不知道微信登錄態(tài)是否失效】
      3. 檢查登錄態(tài)
        1. 登錄態(tài)失效,執(zhí)行小程序登錄流程。
        2. 登錄態(tài)有效,不操作。
      4. 如果2,3步驟中有執(zhí)行過(guò)小程序登陸流程,則提示用戶(hù)重新點(diǎn)擊,轉(zhuǎn)到1
      5. 把加密數(shù)據(jù)發(fā)送到服務(wù)器進(jìn)行解密

微信小程序授權(quán)

為什么要授權(quán)?

在與用戶(hù)交互的過(guò)程中,我們需要獲取并記錄用戶(hù)的一些信息,以提供個(gè)性化的服務(wù),而這些用戶(hù)信息涉及到隱私,這時(shí)候就需要用戶(hù)授權(quán)同意使用這些信息。

獲取信息的流程

  1. 檢查用戶(hù)是否已經(jīng)授權(quán)

    調(diào)用wx.getSetting(),如果已授權(quán),轉(zhuǎn)3,如果未授權(quán),轉(zhuǎn)2

  2. 引導(dǎo)用戶(hù)授權(quán)

    展現(xiàn)授權(quán)按鈕,用戶(hù)點(diǎn)擊并同意

  3. 獲取用戶(hù)信息

    調(diào)用對(duì)應(yīng)的信息獲取接口或在用戶(hù)點(diǎn)擊按鈕的回調(diào)事件中獲取用戶(hù)信息

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

授權(quán)是不是一定要登錄?

授權(quán)并不需要微信登錄,但很多時(shí)候授權(quán)獲取用戶(hù)信息時(shí),獲取到的信息需要進(jìn)行解密,這時(shí)需要有效的 session_key,所以當(dāng) session_key失效時(shí),就需要重新執(zhí)行微信登錄來(lái)更新session_key。

反之,登錄也并不需要授權(quán),只有在需要獲取用戶(hù)信息時(shí)才需要授權(quán)。

換手機(jī)登錄微信會(huì)發(fā)生什么?

token失效,因?yàn)閠oken保存在本地,換手機(jī)后沒(méi)有原手機(jī)上保存的token,或跟原手機(jī)的token不一樣

微信登錄態(tài)不變,如果還在有效期內(nèi),換手機(jī)后調(diào)用wx.checkSession()仍然會(huì)返回有效

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