小程序授权

以下总结如有不足地方请点出改进,大神请一笑尔过勿喷。
授权总结:
wx.checkSession 先判断是否是登录状态
若不是则
1、调用 wx.login 获取 code 将  3drsession 保存在本地(后面用于调用接口数据的凭证)
2、wx.getSetting 获取用户配置是否有获取用户信息
     如果有就下一步 获取用户信息 wx.getUserInfo 
     如果没有 配置用户配置 调起授权 wx.authorize 后再获取用户信息 wx.getUserInfo
       获取用户信息后可以将数据回传服务器保存
3、存在用户拒绝授权的情况下
       用户拒绝在 wx.getUserInfo 的回调 fail 里面调起用户配置 wx.openSetting 配置成功 再去获取用户信息
若是则
     校验 3drsession 是否合法
补丁
        多加一个状态 isaotusel 检验本次获取信息是否获取到用户信息当为0时候 页面刷新重启始终调起用户授权

具体代码如下:

onLaunch: function () {
    var obj =  this;
    //判断用户登录
    wx.checkSession({
      success:  function () {
        //session 未过期,并且在本生命周期一直有效
        var rd3_session = wx.getStorageSync('3rd_session');
             //校验 3drsession 是否合法
        wx.request({
          url:  'https://xxxx/api/index/check_3rdsession',
          data: {
            rd3_session: rd3_session
          },
          header: {
            'content-type''application/json'
          },
          success:  function (res) { 
            // obj.checkaotu()
          }
        })
      },
      fail:  function () {
        //登录态过期
        obj.login_wx();
      }
    })
    //
    if (obj.globalData.isaotusel ==  0){
      this.getuser();
    }
  },
  //登录
  login_wx() {
    var obj =  this;
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        wx.request({
          url:  'https://xxxx/api/index/onlogin',
          data: {
            code: res.code
          },
          header: {
            'content-type''application/json'
          },
          success:  function (res) {
            if (res.data.rd3_session !=  '') {
              //获取到的3rd_session保存在本地
              wx.setStorageSync( '3rd_session', res.data.rd3_session)
              //获取用户信息
              obj.checkaotu();
            }
          }
        })
      }
    })
  },
  // 判断是否同意授权过
  checkaotu() {
    var obj =  this;
    //获取用户授权设置
    wx.getSetting({
      success: res => {
        if (res.authSetting[ 'scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          this.getuser();
        } else{
          //没有配置授权,调起授权
          wx.authorize({
            scope:  'scope.userInfo',
            success:res=>{
              this.getuser();
            }
          })
        }
      }
    })
  },
  //获取用户信息
  getuser(){
    var obj =  this;
    wx.getUserInfo({
      success: res => {
        // 可以将 res 发送给后台解码出 unionId
        this.globalData.userInfo = res.userInfo
        wx.request({
          url:  'https://xxxx/api/index/setuserinfo',
          data: {
            info_json: JSON.stringify(res.userInfo),
            rd3_session: wx.getStorageSync( '3rd_session')
          },
          header: {
            "Content-Type""application/x-www-form-urlencoded"
          },
          method:  "POST",
          success:  function (res) {
            //操作
            obj.globalData.isaotusel =  1;
          }
        })
        // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
        // 所以此处加入 callback 以防止这种情况
        if ( this.userInfoReadyCallback) {
          this.userInfoReadyCallback(res)
        }
      },fail(){
        //用户拒绝则不然操作
        wx.openSetting({ success: (res) => {
          obj.getuser();
        }});
      }
    })
  },
  globalData: {
    userInfo:  null,
    isaotusel: 0
  },
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值