微信小程序之授權 wx.authorize


一、 wx.authorize(Object object)

提前向用戶發起授權請求。調用后會立刻彈窗詢問用戶是否同意授權小程序使用某項功能或獲取用戶的某些數據,但不會實際調用對應接口。如果用戶之前已經同意授權,則不會出現彈窗,直接返回成功。

  • 用戶可以授權的
    scope 包括:
scope 對應接口 描述
scope.userInfo wx.getUserInfo 用戶信息
scope.userLocation wx.getLocation, wx.chooseLocation, wx.openLocation 地理位置
scope.address wx.chooseAddress 通訊地址
scope.invoiceTitle wx.chooseInvoiceTitle 發票抬頭
scope.invoice wx.chooseInvoice 獲取發票
scope.werun wx.getWeRunData 微信運動步數
scope.record wx.startRecord 錄音功能
scope.writePhotosAlbum wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 保存到相冊
scope.camera 組件 攝像頭

注意:上述接口中,wx.authorize({scope: "scope.userInfo"}),無法彈出授權窗口,使用 button 組件,並將 open-type 指定為 getUserInfo 類型,獲取用戶基本信息。https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01

二、 wx.authorize 用法

wx.getSetting({
  success (res) {
    console.log(res.authSetting)
  }
})

如果用戶已經授權過 地理位置,上面代碼則會返回:"scope.userInfo": true

  • 向用戶發起授權請求
// 可以通過 wx.getSetting 先查詢一下用戶是否授權了 "scope.record" 這個 scope

wx.getSetting({
  success(res) {
    if (!res.authSetting['scope.record']) {
      wx.authorize({
        scope: 'scope.record',
        success () {
          // 用戶已經同意小程序使用錄音功能,后續調用 wx.startRecord 接口不會彈窗詢問
          wx.startRecord()
        }
      })
    }
  }
})

三、 注意

  • 微信中使用 wx.getUserInfo 接口直接彈出授權框的開發方式將逐步不再支持。
  • 所以在用戶未授權的情況下,在 onload 函數中使用 wx.getUserInfo 是默認失敗的, 如下:
onLoad: function (options) { 
    // 只有在用戶已經授權后,才能在 onload 函數中獲取到用戶信息
    // 所以,下面通過 wx.getSetting 檢查用戶是否已經授權,
    // 如果沒有授權,則停止執行
    // 如果已經授權,則繼續執行success 
    wx.getSetting({
      success (res){
        if (res.authSetting['scope.userInfo']) {
          // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱
          wx.getUserInfo({
            success: function(res) { 
              console.log(res.userInfo)
            }
          })
        }
      }
    })
}, 
  • 建議使用 button 組件,並將 open-type 指定為 getUserInfo 類型,通過點擊事件獲取用戶基本信息。

  • 代碼如下:

wxml:

 <button open-type="getUserInfo" bindgetuserinfo='getUser'>獲取用戶信息(授權登錄)</button>

js:

getUser(e) { 
    console.log(e)
    wx.getUserInfo({
        success: (res) => {
            console.log(res)
            this.setData({
                userInfo: res.userInfo
            });
        }
    })
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM