知識(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ò)程分兩部分交互:
- 小程序向開(kāi)發(fā)者服務(wù)器請(qǐng)求登錄
code ===> token(自定義登錄態(tài))
- 開(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)題
-
session_key有什么用?
session_key用于解密返回的加密數(shù)據(jù)
- wx.getUserInfo()
- 獲取用戶(hù)手機(jī)號(hào)碼
-
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
-
自定義登錄態(tài)應(yīng)該怎么設(shè)置有效期?
自定義登錄態(tài)其實(shí)跟session_key沒(méi)什么關(guān)系,有效期的設(shè)置就跟傳統(tǒng)的session那樣設(shè)置就可以。
-
什么時(shí)候調(diào)用wx.login()?
因?yàn)檎{(diào)用wx.login()的目的是獲取code,從而更新服務(wù)器的session_key,所以當(dāng)session_key登錄態(tài)失效時(shí)調(diào)用。
-
什么時(shí)候調(diào)用wx.checkSession()?
因?yàn)閣x.checkSession()的作用是檢查登錄態(tài)(session_key)是否失效,所以結(jié)合1,4兩點(diǎn),在以下情況下應(yīng)該調(diào)用wx.checkSession()
- 在獲取用戶(hù)信息或用戶(hù)手機(jī)號(hào)碼之前
- 在其他的服務(wù)器需要使用到session_key進(jìn)行解密數(shù)據(jù)的情況下
-
如何處理小程序登錄流程?(以下token為自定義登錄態(tài))
- 用戶(hù)未登陸(本地?zé)otoken)、token失效或微信登錄態(tài)失效
- 調(diào)用wx.login()獲取code,發(fā)送到開(kāi)發(fā)服務(wù)器
- 開(kāi)發(fā)服務(wù)器使用appid + appsecret + code 向微信接口服務(wù)器獲取openid+session_key
- 開(kāi)發(fā)服務(wù)器生成token,并建立token、openid、session_key的關(guān)聯(lián)
- 開(kāi)發(fā)服務(wù)器返回token給小程序端,小程序端保存toke到本地緩存(storage,數(shù)據(jù)庫(kù)等)
-
如何處理檢查登錄態(tài)流程?
- 有加密數(shù)據(jù)要發(fā)送到服務(wù)器進(jìn)行解密操作,如獲取用戶(hù)信息,獲取用戶(hù)手機(jī)號(hào)碼等
- 調(diào)用wx.checkSession()
- 如果登錄態(tài)有效,轉(zhuǎn)5
- 如果登錄態(tài)失效,調(diào)用wx.login()走小程序登錄流程,登陸成功后轉(zhuǎn)5
- 發(fā)起服務(wù)器請(qǐng)求發(fā)送加密數(shù)據(jù)給服務(wù)器解密
-
常見(jiàn)處理流程
以下請(qǐng)求都帶本地保存的token
-
不需登錄的請(qǐng)求
- 直接請(qǐng)求
-
需要登錄的請(qǐng)求
- 直接請(qǐng)求,返回未登錄狀態(tài)
- 執(zhí)行小程序登錄流程,保存本地token
- 重新請(qǐng)求
-
需要處理解密數(shù)據(jù)的請(qǐng)求
這里有兩種處理方式(建議使用第一種):
- 一進(jìn)入頁(yè)面就進(jìn)行用戶(hù)登錄狀態(tài)和微信登錄態(tài)的檢查
- 用戶(hù)操作getUserInfo,getPhoneNumber等操作的回調(diào)函數(shù)中做用戶(hù)登錄狀態(tài)和微信登錄態(tài)的檢查
處理方式一
- 檢查是否登錄
- 未登錄(本地token為空或接口返回token失效)則執(zhí)行小程序登錄流程,本地保存最新token【這時(shí)微信登錄態(tài)是有效的,因?yàn)檫@過(guò)程重新獲取了session_key】
- 已登錄(本地token不為空且接口返回token未失效),則不執(zhí)行小程序登錄流程?!具@時(shí)還不知道微信登錄態(tài)是否失效】
- 檢查登錄態(tài)
- 登錄態(tài)失效,執(zhí)行小程序登錄流程。
- 登錄態(tài)有效,不操作。
- 等待用戶(hù)操作getUserInfo,getPhoneNumber等操作
- 用戶(hù)操作回調(diào)方法中把加密數(shù)據(jù)發(fā)送到服務(wù)器進(jìn)行解密
處理方式二
- 等待用戶(hù)操作getUserInfo,getPhoneNumber等操作
- 檢查是否登錄
- 未登錄(本地token為空或接口返回token失效)則執(zhí)行小程序登錄流程,本地保存最新token【這時(shí)微信登錄態(tài)是有效的,因?yàn)檫@過(guò)程重新獲取了session_key】
- 已登錄(本地token不為空且接口返回token未失效),則不執(zhí)行小程序登錄流程?!具@時(shí)還不知道微信登錄態(tài)是否失效】
- 檢查登錄態(tài)
- 登錄態(tài)失效,執(zhí)行小程序登錄流程。
- 登錄態(tài)有效,不操作。
- 如果2,3步驟中有執(zhí)行過(guò)小程序登陸流程,則提示用戶(hù)重新點(diǎn)擊,轉(zhuǎn)到1
- 把加密數(shù)據(jù)發(fā)送到服務(wù)器進(jìn)行解密
-
微信小程序授權(quán)
為什么要授權(quán)?
在與用戶(hù)交互的過(guò)程中,我們需要獲取并記錄用戶(hù)的一些信息,以提供個(gè)性化的服務(wù),而這些用戶(hù)信息涉及到隱私,這時(shí)候就需要用戶(hù)授權(quán)同意使用這些信息。
獲取信息的流程
-
檢查用戶(hù)是否已經(jīng)授權(quán)
調(diào)用wx.getSetting(),如果已授權(quán),轉(zhuǎn)3,如果未授權(quán),轉(zhuǎn)2
-
引導(dǎo)用戶(hù)授權(quán)
展現(xiàn)授權(quán)按鈕,用戶(hù)點(diǎn)擊并同意
-
獲取用戶(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)案例查看更多
相關(guān)閱讀
- web開(kāi)發(fā)
- 云南網(wǎng)站建設(shè)公司排名
- 云南網(wǎng)站建設(shè)首選
- 網(wǎng)站建設(shè)服務(wù)公司
- 小程序模板開(kāi)發(fā)公司
- 小程序被騙退款成功
- 云南網(wǎng)站建設(shè)百度
- 網(wǎng)絡(luò)公司聯(lián)系方式
- web學(xué)習(xí)路線(xiàn)
- 云南網(wǎng)絡(luò)營(yíng)銷(xiāo)
- asp網(wǎng)站
- 網(wǎng)站建設(shè)專(zhuān)家
- 軟件開(kāi)發(fā)
- 云南網(wǎng)站建設(shè)公司
- 怎么做網(wǎng)站
- 網(wǎng)站建設(shè)選
- 區(qū)塊鏈
- 云南網(wǎng)站建設(shè)首頁(yè)
- 關(guān)鍵詞快速排名
- 前端開(kāi)發(fā)
- 云南網(wǎng)站建設(shè)方案 doc
- 報(bào)廢車(chē)拆解管理系統(tǒng)
- 云南網(wǎng)站建設(shè)專(zhuān)家
- 云南旅游網(wǎng)站建設(shè)
- 云南網(wǎng)站設(shè)計(jì)
- 網(wǎng)站排名優(yōu)化
- 開(kāi)發(fā)制作小程序
- 網(wǎng)站建設(shè)高手
- 海報(bào)插件
- 微信小程序