為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2019-11 文章編輯:小燈 瀏覽次數(shù):10286
登錄和獲取用戶信息是小程序中最基本的兩步操作,但是由于之前小程序官方開始時(shí)的設(shè)計(jì)缺陷,導(dǎo)致很多開發(fā)者將登錄和獲取用戶信息綁定使用,盡管后來小程序wx.getUserInfo接口調(diào)整為:在用戶未授權(quán)過的情況下調(diào)用此接口,將不再出現(xiàn)授權(quán)彈窗,會直接進(jìn)入 fail回調(diào),但是改了之后,依舊有不少開發(fā)者對這兩步的概念混淆不清,接下來這篇文章將會詳細(xì)介紹小程序這兩步操作
wx.login()用來做登錄的方法,調(diào)用接口獲取登錄憑證,code發(fā)送給后端用于置換session_key和openid等數(shù)據(jù),接下來看看小程序的整個(gè)登錄流程是怎樣的:
這是小程序官方的一張登錄流程圖,現(xiàn)在就來解讀一下這個(gè)流程
同時(shí)滿足以上兩個(gè)條件就能拿到用戶unionid,這樣一來,就能在wx.login()準(zhǔn)確識別出用戶是誰
以上就是小程序的整個(gè)登錄流程,可以看到其實(shí)并不是一定要wx.getUserInfo()才能拿到用戶的信息,在特定的條件下,通過wx.login()的調(diào)用拿到unionId也能后端數(shù)據(jù)庫里拿到用戶信息
wx.getUserInfo()以前調(diào)用時(shí)是會彈出授權(quán)彈框的,根據(jù)用戶的授權(quán)與否進(jìn)入對應(yīng)的回調(diào)函數(shù),但是后來微信發(fā)現(xiàn)開發(fā)者濫用wx.getUserInfo()方法,不授權(quán)用戶信息不能使用小程序,現(xiàn)在就只能通過button組件open-type="getUserInfo"觸發(fā)授權(quán)彈窗,授權(quán)后能獲得用戶信息以及用戶信息的加密數(shù)據(jù),將用戶信息的加密數(shù)據(jù)發(fā)送到后端,后端通過wx.login()的code置換到的session_key對加密數(shù)據(jù)進(jìn)行解密就能拿到用戶的完整信息,這一步其實(shí)是對第一步的補(bǔ)充,當(dāng)wx.login()無法確認(rèn)用戶的時(shí)候時(shí)候才會執(zhí)行到這一步,如果在wx.login()可以確認(rèn)用戶信息時(shí),就可以不用執(zhí)行這一步,實(shí)現(xiàn)用戶的無感登錄。
注意點(diǎn):根據(jù)小程序官方最近發(fā)布的文檔來看,小程序不能用戶進(jìn)入小程序時(shí)就彈登錄框要求用戶登錄才能體驗(yàn)小程序,這種操作審核會被拒,要用戶在體驗(yàn)一定的小程序功能后,才能引導(dǎo)用戶去登錄授權(quán)用戶信息,具體文檔地址
以往我們寫網(wǎng)頁應(yīng)用時(shí),當(dāng)后端下發(fā)的token失效時(shí),請求接口會得到403錯(cuò)誤碼,然后前端接到返回的錯(cuò)誤碼時(shí)就會跳到登錄頁要求用戶重新登錄,但是在小程序當(dāng)token失效時(shí),需要跳到一個(gè)登錄頁重新登錄嗎?明顯不需要,因?yàn)樾〕绦虮旧砭蜎]有賬號密碼登錄,因此登錄失效了直接做一個(gè)無感的重登操作就行了,除非某些小程序在并沒有依賴微信的登錄信息,而是小程序里面內(nèi)置自己的用戶登錄信息,這時(shí)候就需要跳到一個(gè)登錄頁面進(jìn)行重登,但是這樣的小程序還是少數(shù),接下來就來看看如何小程序是如何做無感重登的。
直接來看代碼:
const Fly = require('../libs/flyio')
const fly = new Fly()
const newFly = new Fly()
let time = 0
let baseUrl = 'xxxxx'
fly.interceptors.request.use((request) => {
wx.showNavigationBarLoading()
request.headers['token'] = wx.getStorageSync('token')
request.baseURL = baseUrl
return request
})
newFly.interceptors.request.use((request) => {
wx.showNavigationBarLoading()
request.headers['token'] = wx.getStorageSync('token')
request.baseURL = baseUrl
return request
})
fly.interceptors.response.use(
(response, promise) => {
wx.hideNavigationBarLoading()
return promise.resolve(response.data)
},
function (err, promise) {
wx.hideNavigationBarLoading()
// session或者session_key失效的時(shí)候重新登錄
if (err.status === 403) {
//鎖定當(dāng)前實(shí)例,后續(xù)請求會在攔截器外排隊(duì)
this.lock()
// 當(dāng)出現(xiàn)未認(rèn)證的情況時(shí)重新登錄,超過三次拋出錯(cuò)誤
if (time > 3) {
time = 0
return promise.reject(err.message + `(${err.status})`)
}
return new Promise((resolve, reject) => {
wx.login({
success: (e) => {
let options = {
'code': e.code
}
resolve(options)
}
})
}).then((options) => {
return newFly.post('/login', options).then(info => {
wx.setStorageSync('token', info.token)
time++
//解鎖后,會繼續(xù)發(fā)起請求隊(duì)列中的任務(wù)
this.unlock()
// 重新請求失敗的請求
return fly.request(err.request)
})
})
}
}
)
export {
fly
}
上面的代碼展示的就是小程序token過期重登的過程,代碼不多,關(guān)鍵的地方也加上了注釋,很容易理解,這里面最關(guān)鍵的就是使用了flyio這個(gè)網(wǎng)絡(luò)請求庫,利用這個(gè)庫做的過期重登,這是一個(gè)基于Promise的、強(qiáng)大的、支持多種JavaScript運(yùn)行時(shí)的http請求庫,可以使用一份http請求代碼在瀏覽器、微信小程序、Weex、Node、React Native、快應(yīng)用中都能正常運(yùn)行,在小程序中使用這個(gè)庫十分方便。這段代碼為了避免死循環(huán),因此用了一個(gè)計(jì)數(shù),超過三次就不會再重試登錄,直接拋錯(cuò)
本篇文章主要介紹了小程序的登錄流程、獲取用戶信息、以及登錄過期重登的相關(guān)內(nèi)容,這里介紹的只是基礎(chǔ)的通用的流程,實(shí)際上每個(gè)小程序的業(yè)務(wù)可能不太一樣,因此在具體應(yīng)用需要根據(jù)具體業(yè)務(wù)再行調(diào)整。
如果有錯(cuò)誤或不嚴(yán)謹(jǐn)?shù)牡胤剑瑲g迎批評指正,如果喜歡,歡迎點(diǎn)贊
日期:2019-11 瀏覽次數(shù):5530
日期:2019-11 瀏覽次數(shù):11985
日期:2019-11 瀏覽次數(shù):4354
日期:2019-11 瀏覽次數(shù):5390
日期:2019-11 瀏覽次數(shù):5261
日期:2019-11 瀏覽次數(shù):7187
日期:2019-11 瀏覽次數(shù):5167
日期:2019-11 瀏覽次數(shù):15772
日期:2019-11 瀏覽次數(shù):4721
日期:2019-11 瀏覽次數(shù):6524
日期:2019-11 瀏覽次數(shù):5376
日期:2019-11 瀏覽次數(shù):4566
日期:2019-11 瀏覽次數(shù):10764
日期:2019-11 瀏覽次數(shù):8323
日期:2019-11 瀏覽次數(shù):5084
日期:2019-11 瀏覽次數(shù):4315
日期:2019-11 瀏覽次數(shù):8958
日期:2019-11 瀏覽次數(shù):4651
日期:2019-11 瀏覽次數(shù):4848
日期:2019-11 瀏覽次數(shù):4868
日期:2019-11 瀏覽次數(shù):4482
日期:2019-11 瀏覽次數(shù):5029
日期:2019-11 瀏覽次數(shù):10285
日期:2019-11 瀏覽次數(shù):5463
日期:2019-11 瀏覽次數(shù):5440
日期:2019-11 瀏覽次數(shù):4890
日期:2019-11 瀏覽次數(shù):12334
日期:2019-11 瀏覽次數(shù):7357
日期:2019-11 瀏覽次數(shù):7906
日期:2019-11 瀏覽次數(shù):4859
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.