成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

優(yōu)雅解決微信小程序授權(quán)登錄需要button觸發(fā)

plus2047 / 2588人閱讀

摘要:優(yōu)雅解決微信小程序授權(quán)登錄需要觸發(fā)聊一聊最近的一個(gè)項(xiàng)目,這個(gè)項(xiàng)目是一個(gè)收書售書的小程序,有商城專欄信息發(fā)布論壇等功能。微信不會(huì)把的有效期告知開發(fā)者。

優(yōu)雅解決微信小程序授權(quán)登錄需要button觸發(fā)

聊一聊最近的一個(gè)項(xiàng)目,這個(gè)項(xiàng)目是一個(gè)收書、售書的小程序,有商城、專欄、信息發(fā)布論壇等功能。雖然不是面向所有用戶,但要求無論用戶是否授權(quán)都皆可使用,但同時(shí)也要求部分功能對(duì)不授權(quán)的用戶限制開放。

問題總結(jié)如下

首先是小程序不授權(quán)也可以使用,但是只有部分功能可用,比如瀏覽

第二問題是在用戶想進(jìn)一步使用小程序時(shí)需要獲取用戶授權(quán)

獲取到用戶授權(quán)的時(shí)候該如何處理跳轉(zhuǎn)

解決方案 1.首先用戶進(jìn)入小程序的時(shí)候會(huì)在app.js中的onLaunch發(fā)起登陸

微信小程序文檔這樣說

調(diào)用 wx.login() 獲取 臨時(shí)登錄憑證code ,并回傳到開發(fā)者服務(wù)器。
調(diào)用 code2Session 接口,換取 用戶唯一標(biāo)識(shí) OpenID 和 會(huì)話密鑰 session_key。
之后開發(fā)者服務(wù)器可以根據(jù)用戶標(biāo)識(shí)來生成自定義登錄態(tài),用于后續(xù)業(yè)務(wù)邏輯中前后端交互時(shí)識(shí)別用戶身份。

也就是說服務(wù)器可以返回一個(gè)自定義的session,緩存后用于后續(xù)業(yè)務(wù)邏輯中前后端交互時(shí)識(shí)別用戶身份

同時(shí)微信小程序文檔也說了

1.wx.login 調(diào)用時(shí),用戶的 session_key 可能會(huì)被更新而致使舊 session_key 失效(刷新機(jī)制存在最短周期,如果同一個(gè)用戶短時(shí)間內(nèi)多次調(diào)用 wx.login,并非每次調(diào)用都導(dǎo)致 session_key 刷新)。開發(fā)者應(yīng)該在明確需要重新登錄時(shí)才調(diào)用 wx.login,及時(shí)通過 code2Session 接口更新服務(wù)器存儲(chǔ)的 session_key。
2.微信不會(huì)把 session_key 的有效期告知開發(fā)者。我們會(huì)根據(jù)用戶使用小程序的行為對(duì) session_key 進(jìn)行續(xù)期。用戶越頻繁使用小程序,session_key 有效期越長(zhǎng)。
3.開發(fā)者在 session_key 失效時(shí),可以通過重新執(zhí)行登錄流程獲取有效的 session_key。使用接口 wx.checkSession可以校驗(yàn) session_key 是否有效,從而避免小程序反復(fù)執(zhí)行登錄流程。
當(dāng)開發(fā)者在實(shí)現(xiàn)自定義登錄態(tài)時(shí),可以考慮以 session_key 有效期作為自身登錄態(tài)有效期,也可以實(shí)現(xiàn)自定義的時(shí)效性策略。

意思說沒必要每次啟動(dòng)小程序都要登錄,我這里使用的是每次啟動(dòng)都要登錄

onLaunch: function () {
    wx.login({
      success: res => {
        if (res.code) {
          // 發(fā)送 res.code 到后臺(tái)換取 openId, sessionKey
        }else{
          console.log("獲取用戶登錄態(tài)失敗:" + res.errMsg)
        }
      }
    })
2.然后再通過wx.getSetting判斷用戶是否已經(jīng)授權(quán)過了,如果授權(quán)過了則可以直接調(diào)用 getUserInfo 獲取頭像昵稱,不會(huì)彈框,存入globalData,那么該用戶可以進(jìn)行所有的操作。同時(shí)可以將 res 發(fā)送給后臺(tái)解碼出 unionId。
wx.getSetting({
      success: res => {
        if (res.authSetting["scope.userInfo"]) {
          // 已經(jīng)授權(quán),可以直接調(diào)用 getUserInfo 獲取頭像昵稱,不會(huì)彈框
          wx.getUserInfo({
            success: res => {
              // 可以將 res 發(fā)送給后臺(tái)解碼出 unionId

              this.globalData.userInfo = res.userInfo

              // 由于 getUserInfo 是網(wǎng)絡(luò)請(qǐng)求,可能會(huì)在 Page.onLoad 之后才返回
              // 所以此處加入 callback 以防止這種情況
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
3.當(dāng)小程序啟動(dòng)后,用戶之前沒有授權(quán)過的話,在使用發(fā)布信息、購(gòu)物車、我的、論壇等功能的時(shí)候則跳轉(zhuǎn)至提示用戶授權(quán)頁(yè)面或者使用彈窗提示用戶授權(quán),這個(gè)項(xiàng)目用的是頁(yè)面。

注意: 因?yàn)橛脩羰跈?quán)之后要跳轉(zhuǎn)到用戶要使用的功能頁(yè)面,所以要在重定向之前記錄好用戶當(dāng)前的路徑信息、要使用的功能的頁(yè)面的路徑信息,存儲(chǔ)在globalData中,在獲取授權(quán)后再重定向至該頁(yè)面。 如果用戶點(diǎn)擊拒絕則返回原來頁(yè)面

貼上部分代碼

/**
*  oldPath = getApp().globalData.oldPath
*  用戶要用的功能頁(yè)面
*  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 是網(wǎng)絡(luò)請(qǐng)求,可能會(huì)在 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{
    // 授權(quán)失敗
    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){

}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102423.html

相關(guān)文章

  • 信小程序授權(quán)登錄、解密unionId出錯(cuò)

    摘要:注沒有在微信開放平臺(tái)做開發(fā)者資質(zhì)認(rèn)證的就不要浪費(fèi)時(shí)間了,沒認(rèn)證無法獲取,認(rèn)證費(fèi)用元年,微信授權(quán)登錄流程第一步獲取用戶臨時(shí)登錄憑證第二步獲取加密過的數(shù)據(jù)和解密參數(shù)第三步把步驟一二中的傳到開發(fā)者自己服務(wù)端第三步服務(wù)端獲取到之后用方法請(qǐng)求如下微信 注:沒有在微信開放平臺(tái)做開發(fā)者資質(zhì)認(rèn)證的就不要浪費(fèi)時(shí)間了,沒認(rèn)證無法獲取unionId,認(rèn)證費(fèi)用300元/年,emmmm.... 微信授權(quán)登錄流程...

    tinysun1234 評(píng)論0 收藏0
  • 信小程序開發(fā)中的二三事之網(wǎng)易云信IMSDK DEMO

    摘要:傳統(tǒng)的網(wǎng)頁(yè)編程采用的三劍客來實(shí)現(xiàn),在微信小程序中同樣有三劍客。觀察者模式不難實(shí)現(xiàn),重點(diǎn)是如何在微信小程序中搭配其特有的生命周期來使用。交互事件傳統(tǒng)的事件傳遞類型有冒泡型與捕獲型,微信小程序中自然也有。 本文由作者鄒永勝授權(quán)網(wǎng)易云社區(qū)發(fā)布。 簡(jiǎn)介為了更好的展示我們即時(shí)通訊SDK強(qiáng)悍的能力,網(wǎng)易云信IM SDK微信小程序DEMO的開發(fā)就提上了日程。用產(chǎn)品的話說就是: 云信 IM 小程序 S...

    weij 評(píng)論0 收藏0
  • 程序開發(fā)中的那些小坑

    摘要:解決方法用組件替換組件,用微信小程序的實(shí)現(xiàn)點(diǎn)擊切換效果除此之外,在中也不能使用組件。接口更改問題微信小程序最近被吐槽最多的一個(gè)更改,就是用戶使用開發(fā)和體驗(yàn)版時(shí)不會(huì)彈出授權(quán),正式版不受影響。 最近專門做小程序開發(fā)中,跟大家分享下遇到那些不得不處理的小坑,歡迎指正 1.小程序用 WxParse 在手機(jī)上不能正確解析 html 代碼并顯示 解決辦法: 這個(gè)是 wxparse 代碼的一個(gè)...

    CODING 評(píng)論0 收藏0
  • 程序開發(fā)中的那些小坑

    摘要:解決方法用組件替換組件,用微信小程序的實(shí)現(xiàn)點(diǎn)擊切換效果除此之外,在中也不能使用組件。接口更改問題微信小程序最近被吐槽最多的一個(gè)更改,就是用戶使用開發(fā)和體驗(yàn)版時(shí)不會(huì)彈出授權(quán),正式版不受影響。 最近專門做小程序開發(fā)中,跟大家分享下遇到那些不得不處理的小坑,歡迎指正 1.小程序用 WxParse 在手機(jī)上不能正確解析 html 代碼并顯示 解決辦法: 這個(gè)是 wxparse 代碼的一個(gè)...

    jerryloveemily 評(píng)論0 收藏0
  • 程序開發(fā)中的那些小坑

    摘要:解決方法用組件替換組件,用微信小程序的實(shí)現(xiàn)點(diǎn)擊切換效果除此之外,在中也不能使用組件。接口更改問題微信小程序最近被吐槽最多的一個(gè)更改,就是用戶使用開發(fā)和體驗(yàn)版時(shí)不會(huì)彈出授權(quán),正式版不受影響。 最近專門做小程序開發(fā)中,跟大家分享下遇到那些不得不處理的小坑,歡迎指正 1.小程序用 WxParse 在手機(jī)上不能正確解析 html 代碼并顯示 解決辦法: 這個(gè)是 wxparse 代碼的一個(gè)...

    Achilles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<