摘要:優雅解決微信小程序授權登錄需要觸發聊一聊最近的一個項目,這個項目是一個收書售書的小程序,有商城專欄信息發布論壇等功能。微信不會把的有效期告知開發者。
優雅解決微信小程序授權登錄需要button觸發
聊一聊最近的一個項目,這個項目是一個收書、售書的小程序,有商城、專欄、信息發布論壇等功能。雖然不是面向所有用戶,但要求無論用戶是否授權都皆可使用,但同時也要求部分功能對不授權的用戶限制開放。
問題總結如下首先是小程序不授權也可以使用,但是只有部分功能可用,比如瀏覽
第二問題是在用戶想進一步使用小程序時需要獲取用戶授權
獲取到用戶授權的時候該如何處理跳轉
解決方案 1.首先用戶進入小程序的時候會在app.js中的onLaunch發起登陸微信小程序文檔這樣說
調用 wx.login() 獲取 臨時登錄憑證code ,并回傳到開發者服務器。
調用 code2Session 接口,換取 用戶唯一標識 OpenID 和 會話密鑰 session_key。
之后開發者服務器可以根據用戶標識來生成自定義登錄態,用于后續業務邏輯中前后端交互時識別用戶身份。
也就是說服務器可以返回一個自定義的session,緩存后用于后續業務邏輯中前后端交互時識別用戶身份
同時微信小程序文檔也說了
1.wx.login 調用時,用戶的 session_key 可能會被更新而致使舊 session_key 失效(刷新機制存在最短周期,如果同一個用戶短時間內多次調用 wx.login,并非每次調用都導致 session_key 刷新)。開發者應該在明確需要重新登錄時才調用 wx.login,及時通過 code2Session 接口更新服務器存儲的 session_key。
2.微信不會把 session_key 的有效期告知開發者。我們會根據用戶使用小程序的行為對 session_key 進行續期。用戶越頻繁使用小程序,session_key 有效期越長。
3.開發者在 session_key 失效時,可以通過重新執行登錄流程獲取有效的 session_key。使用接口 wx.checkSession可以校驗 session_key 是否有效,從而避免小程序反復執行登錄流程。
當開發者在實現自定義登錄態時,可以考慮以 session_key 有效期作為自身登錄態有效期,也可以實現自定義的時效性策略。
意思說沒必要每次啟動小程序都要登錄,我這里使用的是每次啟動都要登錄
onLaunch: function () { wx.login({ success: res => { if (res.code) { // 發送 res.code 到后臺換取 openId, sessionKey }else{ console.log("獲取用戶登錄態失敗:" + res.errMsg) } } })2.然后再通過wx.getSetting判斷用戶是否已經授權過了,如果授權過了則可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框,存入globalData,那么該用戶可以進行所有的操作。同時可以將 res 發送給后臺解碼出 unionId。
wx.getSetting({ success: res => { if (res.authSetting["scope.userInfo"]) { // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框 wx.getUserInfo({ success: res => { // 可以將 res 發送給后臺解碼出 unionId this.globalData.userInfo = res.userInfo // 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回 // 所以此處加入 callback 以防止這種情況 if (this.userInfoReadyCallback) { this.userInfoReadyCallback(res) } } }) } } })3.當小程序啟動后,用戶之前沒有授權過的話,在使用發布信息、購物車、我的、論壇等功能的時候則跳轉至提示用戶授權頁面或者使用彈窗提示用戶授權,這個項目用的是頁面。
注意: 因為用戶授權之后要跳轉到用戶要使用的功能頁面,所以要在重定向之前記錄好用戶當前的路徑信息、要使用的功能的頁面的路徑信息,存儲在globalData中,在獲取授權后再重定向至該頁面。 如果用戶點擊拒絕則返回原來頁面
貼上部分代碼
/** * oldPath = getApp().globalData.oldPath * 用戶要用的功能頁面 * newPath = getApp().globalData.goToPath */ const oldPath = getApp().globalData.oldPath const newPath = getApp().globalData.goToPath if (app.globalData.userInfo) { goNewPath(newPath) } else if (this.data.canIUse) { // 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回 // 所以此處加入 callback 以防止這種情況 app.userInfoReadyCallback = res => { if (e.detail.userInfo != void 0){ app.globalData.userInfo = res.userInfo goNewPath(newPath) }else{ goOldPath(oldPath) } } } else { // 在沒有 open-type=getUserInfo 版本的兼容處理 wx.getUserInfo({ success: res => { if (e.detail.userInfo != void 0){ app.globalData.userInfo = res.userInfo goNewPath(newPath) }else{ goOldPath(oldPath) } } }) } }, bindGetUserInfo: function (e) { if (e.detail.userInfo != void 0){ app.globalData.userInfo = e.detail.userInfo wx.switchTab({ url: "../bookcity/bookcity", success: function (res) { }, fail: function (res) { }, complete: function (res) { }, }) }else{ // 授權失敗 goOldPath(oldPath) } }, goNewPath: function(path){ // isTab()判斷路徑是否是Tab if(isTab(path)){ wx.switchTab({ url: path, success: function(res) {}, fail: function(res) {}, complete: function(res) {}, }) }else{ wx.reLaunch({ url: path , }) } }, goOldPath: function(path){ wx.navigateBack({ delta: 1, }) }, isTab: function(path){ }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102423.html
摘要:注沒有在微信開放平臺做開發者資質認證的就不要浪費時間了,沒認證無法獲取,認證費用元年,微信授權登錄流程第一步獲取用戶臨時登錄憑證第二步獲取加密過的數據和解密參數第三步把步驟一二中的傳到開發者自己服務端第三步服務端獲取到之后用方法請求如下微信 注:沒有在微信開放平臺做開發者資質認證的就不要浪費時間了,沒認證無法獲取unionId,認證費用300元/年,emmmm.... 微信授權登錄流程...
摘要:傳統的網頁編程采用的三劍客來實現,在微信小程序中同樣有三劍客。觀察者模式不難實現,重點是如何在微信小程序中搭配其特有的生命周期來使用。交互事件傳統的事件傳遞類型有冒泡型與捕獲型,微信小程序中自然也有。 本文由作者鄒永勝授權網易云社區發布。 簡介為了更好的展示我們即時通訊SDK強悍的能力,網易云信IM SDK微信小程序DEMO的開發就提上了日程。用產品的話說就是: 云信 IM 小程序 S...
摘要:解決方法用組件替換組件,用微信小程序的實現點擊切換效果除此之外,在中也不能使用組件。接口更改問題微信小程序最近被吐槽最多的一個更改,就是用戶使用開發和體驗版時不會彈出授權,正式版不受影響。 最近專門做小程序開發中,跟大家分享下遇到那些不得不處理的小坑,歡迎指正 1.小程序用 WxParse 在手機上不能正確解析 html 代碼并顯示 解決辦法: 這個是 wxparse 代碼的一個...
摘要:解決方法用組件替換組件,用微信小程序的實現點擊切換效果除此之外,在中也不能使用組件。接口更改問題微信小程序最近被吐槽最多的一個更改,就是用戶使用開發和體驗版時不會彈出授權,正式版不受影響。 最近專門做小程序開發中,跟大家分享下遇到那些不得不處理的小坑,歡迎指正 1.小程序用 WxParse 在手機上不能正確解析 html 代碼并顯示 解決辦法: 這個是 wxparse 代碼的一個...
摘要:解決方法用組件替換組件,用微信小程序的實現點擊切換效果除此之外,在中也不能使用組件。接口更改問題微信小程序最近被吐槽最多的一個更改,就是用戶使用開發和體驗版時不會彈出授權,正式版不受影響。 最近專門做小程序開發中,跟大家分享下遇到那些不得不處理的小坑,歡迎指正 1.小程序用 WxParse 在手機上不能正確解析 html 代碼并顯示 解決辦法: 這個是 wxparse 代碼的一個...
閱讀 1324·2023-04-26 00:10
閱讀 2427·2021-09-22 15:38
閱讀 3744·2021-09-22 15:13
閱讀 3502·2019-08-30 13:11
閱讀 645·2019-08-30 11:01
閱讀 3027·2019-08-29 14:20
閱讀 3205·2019-08-29 13:27
閱讀 1724·2019-08-29 11:33