微信小程序開發問答《七十三》登錄相關問題 & 上(shàng)傳logo返回後不(bù)能同步 ... ...
發表時(shí)間:2021-4-30
發布人(rén):融晨科技
浏覽次數:69
先說(shuō)下我所理解的(de):
- wx.checksession() 隻能檢查用code換來(lái)的(de)session_key在(zài)微信服務器中是(shì)否過期。
- 而(ér)前端拿到(dào)後台生成的(de)3rd_session, 這(zhè)個(gè)3rd_session的(de)過期時(shí)間是(shì)服務器定義的(de)。
如果上(shàng)面的(de)理解沒錯的(de)話(有錯誤望指出(chū)),我猜想就(jiù)會出(chū)現下面兩種情況:
- wx.checkSession()檢測的(de)微信服務器session_key并沒有過期。而(ér)我們服務器3rd_session 已經過期,這(zhè)時(shí)候怎麽辦,是(shì)否要(yào / yāo)重新走一遍登錄流程。
- wx.checkSession()已過期,這(zhè)種情況下,當然不(bù)管3rd_session是(shì)否過期,都需要(yào / yāo)重新走一遍登錄流程來(lái)重置, 這(zhè)樣處理對嗎。
根據以(yǐ)上(shàng),那是(shì)不(bù)是(shì)每次http請求都要(yào / yāo)先wx.checkSession()來(lái)檢測是(shì)否過期呢。并且我懷疑會有情況一出(chū)現的(de)可以(yǐ),這(zhè)個(gè)過期并不(bù)能判定3rd_session是(shì)否過期。
所以(yǐ),感覺很混亂。想知道(dào)大(dà)家是(shì)怎麽處理的(de)。
答:我認爲(wéi / wèi),既然自己的(de)服務器已經維護了(le/liǎo)一套session,客戶端是(shì)沒有必要(yào / yāo)關注wx.checksession() 的(de)。
如果想知道(dào)是(shì)否過期,問自己的(de)服務器就(jiù)好了(le/liǎo),就(jiù)像樓上(shàng)所說(shuō),小程序的(de)這(zhè)些接口沒有次數限制,由服務端自己去處理1.3rd_session未過期,session_key過期,則服務器自己更新session_key就(jiù)好
2.3rd_session過期,session_key未過期,更新服務器3rd_session就(jiù)好(重新走流程)
session
登錄信息存到(dào) sessionStorage
裏面。根據文檔 轉發 ,小程序内的(de)轉發方法 onShareAppMessage 需要(yào / yāo)直接返回一個(gè)包含轉發内容的(de)對象,該對象内的(de) path 值爲(wéi / wèi)接受轉發者看到(dào)的(de)頁面路徑。例如
Page({
onShareAppMessage: function (res) {
return {
title: '自定義轉發标題',
path: '/page/user?queryId=123',
success: function(res) {
// 轉發成功
},
}
}
})
假如拼接 path 值所需的(de) queryId 是(shì)由一個(gè)請求返回的(de),即不(bù)能同步獲取到(dào),例如
Page({
onShareAppMessage: function (res) {
let queryId = ''
wx.request({
url: '...',
method: 'GET',
success (res) {
queryId = res.queryId
},
})
return {
title: '自定義轉發标題',
path: `/page/user?queryId=${queryId}`,
success (res) {
// 轉發成功
},
}
}
})
那麽 JavaScript 有沒有什麽方法可以(yǐ)使以(yǐ)上(shàng)的(de) onShareAppMessage 方法直接返回有效的(de) queryId 呢,用 promise 之(zhī)類的(de)話?
答:我改了(le/liǎo)那個(gè)weixin.js
還有種就(jiù)是(shì)可以(yǐ)不(bù)傳link,會動态獲取當前url,也(yě)就(jiù)是(shì)你可以(yǐ)在(zài)url上(shàng)附加#aa這(zhè)種,也(yě)可以(yǐ)獲取到(dào)