微信小程序开发-用户授权

微信小程序用户的授权分为几种方式,一种是对不同scope的授权,比如userInfo,需要用户手动点击允许才能获取,另一种是通过wx.login静默方式获取code,在与后台服务器交互,访问微信的api来得到会话sessionkey,我这里是两者进行结合,用户授权信息可以获取到微信用户的基本信息,但是用户的openid是存放于userinfo的encryptedData加密数据对象中,还是需要进行后台请求sessionkey进行解密,所以后台请求交互直接通过微信api的code2Session进行一次Get请求获取到openid,下面来进行具体步骤的讲解

1.判断用户是否对个人信息授权,通过wx.getSetting函数调用,查看scope域中是否包含userinfo

 wx.getSetting({
          success(res) {
            if (res.authSetting['scope.userInfo']) {
            
            }
          }
        })

 如果用户没有授权,这时候我们就需要引导用户进行授权,但是微信小程序2018.4.1更新说明,不再提供可以直接弹出用户信息授权的窗口,必须要通过<button open-type="getUserInfo"/>按钮的方式,让用户进行交互操作,所以我们需要在用户未授权时,弹出一个全窗口的模态窗口,让用户进行点击,类似于一个欢迎使用的界面,点击开始使用按钮则弹出用户授权,只有授权后才能显示主页面,需要注意的是,在欢迎使用页面需要通过wx.hideTabBar({})函数将tabbar隐藏,防止用户可以操作其他界面

2.用户同意授权后,调用wx.login方法,获取登陆code,与后台交互,初始化管理平台用户到数据库与微信用户的openid进行绑定,然后回写到本地缓存数据中,这里我封装了一个方法大家可以参考一下

var network = require('network.js');
function initWXAccount(url,page){
  wx.getSetting({
    success(res) {
      if (res.authSetting['scope.userInfo']) {
        wx.getUserInfo({
          success(res) {
            const userInfo = res.userInfo
            wx.login({
              success(res) {
                if (res.code) {
                  userInfo["code"] = res.code;
                  //请求后端初始化后台系统的微信账号
                  network.postRequestLoading(url, userInfo, function success(res) {
                    if (res.isSuccess) {
                      var openid = res.result;
                      //存入本地缓存
                      wx.setStorage({
                        key: 'openid',
                        data: openid
                      })
                      console.log("初始化openid到lcoalstorage成功")
                      //写入全局变量
                      page.globalData.openid = openid
                      console.log("初始化openid到globalData成功")
                      wx.showTabBar({
                        
                      })
                    }
                  }, function fail(res) {
                    console.log(res)
                  })
                } else {
                  console.log('登录失败!' + res.errMsg)
                }
              }
            })
          }
        })
      }
    }
  })
}

module.exports = {
  initWXAccount: initWXAccount
}

这里需要注意以下,如果用户拒绝授权,我可已通过按钮绑定事件中的e.detail.rawData来判断,授权失败,则该对象为undefined

3.需要注意的是,本地缓存可能会被人为清除或者缓存存储量达到上限被自动清楚,所以我们需要在小程序启动时,进行判断,如果缓存不存在且用户已经授权,就需要与后台再次交互,获取到openid写入到本地

onLaunch: function() {
    //查找用户的本地openid
    var app = this;
    var wxuseriniturl = app.globalData.rooturl + "/wx//user/initAccount";
    wx.getStorage({
      key: 'openid',
      success(res) {
        //写入global
        var openid = res.data
        app.globalData.openid = openid;
        console.log("读取到本地openid:" + openid);
      },
      fail(res) {
        //未找到openid,有两种情况
        //1.用户未授权,不用管,用户授权后会自动初始化
        //2.用户授权额,但是微信本地缓存被清了,需要重新请求写入
        wx.getSetting({
          success(res) {
            if (res.authSetting['scope.userInfo']) {
              console.log("未读取到本地openid,用户已授权,进行重新初始化到本地");
              wxauth.initWXAccount(wxuseriniturl, app);
            }
          }
        })
      }
    })

  }

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值