用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 实战教程 查看内容

简化微信小程序用户授权

Rolan 2020-3-20 00:15

在开发小程序中,获取用户授权是一个繁琐的步骤,觉得不错,请点赞哦相关APIwx.getSetting({ success (res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLoca ...

在开发小程序中,获取用户授权是一个繁琐的步骤,觉得不错,请点赞哦

相关API

wx.getSetting({
  success (res) {
    console.log(res.authSetting)
    // res.authSetting = {
    //   "scope.userInfo": true,
    //   "scope.userLocation": 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()
        }
      })
    }
  }
})
复制代码

Promisify相关API

微信小程序的API都是回调函数,一不小心就是回调地狱。我们可以用Promise封装下

const promisify = fn=>(arg={})=>new Promise((resolve,reject)=>{
  arg.success=function(res){
    resolve(res)
  }
  arg.fail=function(err){
    reject(err)
  }
  fn(arg)
})
复制代码

使用:

const wxGetSetting = promisify(wx.getSetting)
wxGetSetting().then(res=>console.log(res))
复制代码

解释

// promisify接受一个fn函数
const promisify = function(fn){
// promisify返回一个函数,这个函数可以接受一个arg参数
// arg默认是空对象,因为微信小程序api都是接受一个对象参数的
  return function(arg={}){
    // 该参数执行后,返回一个promise对象
    return new Promise((resolve,reject)=>{
      // 给参数加上success和fail
      arg.success=function(res){
        resolve(res)
      }
      arg.fail=function(fail){
        reject(fail)
      }
      // 执行fn
      fn(arg)// fn是传进来的wx.getSetting
    })
  }
}
复制代码

简化授权

const wxGetSetting = promisify(wx.getSetting)
const wxAuthorize = promisify(wx.authorize)
function myAuthorize(authSetting) {
    return new Promise((resolve, reject) => {
        wxGetSetting().then(res => {
            if (res.authSetting[authSetting]) {
                resolve("ok")
            } else {
                return wxAuthorize({
                    scope: authSetting
                }).then(res => {
                    resolve("ok")
                }).catch(err => {
                    reject("fail")
                })
            }
        })

    })
}
复制代码

使用:

myAuthorize("scope.userLocation")
  .then(res=>console.log(res))
	.catch(err=>console.log(err))
复制代码
鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏
原作者: 胡志武98 来自: 掘金