微信小程序之 wx.getUserInfo引导用户授权问题

首先,在page外定义一个函数用户判断是否为空对象

var isEmptyObject = function (e) {
  var temp;
  for (temp in e)
    return !1;
  return !0
}

然后,在page中的onload里面调用授权

onLoad: function () {
    var that = this;
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo
      })
    } else if (this.data.canIUse) {
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo
          })
          that.checkSettingStatu();
        },
        fail: function () {
          wx.showModal({
            title: ‘用户未授权‘,
            content: ‘如需正常使用该小程序功能,请按确定并在授权管理中选中“用户信息”,然后点按确定。最后再重新进入小程序即可正常使用。‘,
            showCancel: false,
            success: function (resbtn) {
              if (resbtn.confirm) {
                wx.openSetting({
                  success: function success(resopen) {
                    //  获取用户数据
                    that.checkSettingStatu();
                  }
                });
              }
            }
          })
        }
      })
    }
  }

最后,在page中定义一个 用于检测 当前授权的状态

checkSettingStatu: function (cb) {
    var that = this;
    // 判断是否是第一次授权,非第一次授权且授权失败则进行提醒
    wx.getSetting({
      success: function success(res) {
        var authSetting = res.authSetting;
        if (isEmptyObject(authSetting)) {
               //第一次
        } else {
          // 没有授权的提醒
          if (authSetting[‘scope.userInfo‘] === false) {
            wx.showModal({
              title: ‘用户未授权‘,
              content: ‘如需正常使用该小程序功能,请按确定并在授权管理中选中“用户信息”,然后点按确定。最后再重新进入小程序即可正常使用。‘,
              showCancel: false,
              success: function (res) {
                if (res.confirm) {
                  wx.openSetting({
                    success: function success(res) {
                      console.log()
                    }
                  });
                }
              }
            })
          } else if (authSetting[‘scope.userInfo‘] === true) {
                      //该处用户获取用户的一些授权信息
            if (that.data.userInfo) {
              var nickname = that.data.userInfo.nickName;
              var gender = that.data.userInfo.gender
              //性别 0:未知、1:男、2:女
              if (gender == 1) {
                gender = "True"
              } else if (gender == 2) {
                gender = "False"
              } else {
                gender = "True"
              }

            }
          }
        }
      }
    })
  }

简单的记录,不喜勿喷。

原文地址:https://www.cnblogs.com/bfwbfw/p/8744901.html

时间: 2024-08-10 21:02:16

微信小程序之 wx.getUserInfo引导用户授权问题的相关文章

微信小程序之wx.navigateback往回携带参数

在微信小程序开发的过程当中  经常碰到一些带逻辑的一些事情 就比如 新增地址 修改地址  筛选用户条件等页面的时候  我们也可以用wx.navigateTo来跳转实现 但其中有很多问题 1.微信的十层跳转  当你用navigateTo跳转的时候跳转十次的时候就跳不动了 2.参数的传递 我们在用navigateTo跳转的时候通常带着参数来跳  试想一下 如果我们一种这么跳 那么携带的参数越来越多 这不是开发的一个好事情 所以在以上的问题上我们可以用navigateback来实现  既仅携带本次跳转

【微信小程序】springboot后台获取用户的openid

openid可以标识一个用户,session_key会变,所以来获取一下openid. openid不能在微信小程序中直接获取,需要后台发送请求到微信的接口,然后微信返回一个json格式的字符串到后台,后台处理之后,再返回到微信小程序. 发布的小程序需要https的域名,而测试的时候可以使用http. 小程序在app.js中,修改login()中的内容: // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, session

微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题

以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx.canvasToTempFilePath wx.saveFile 官方文档中只有一行,真是坑爹啊,原来 wx.canvasToTempFilePath参数为一个对象包括canvasID,success,fail,complete,和wx.saveFile差不多: wx.canvasToTempFi

【微信小程序】 wx:if 与 hidden(隐藏元素)区别

wx:if 与 hidden 都可以控制微信小程序中元素的显示与否. 区别: wx:if 是遇 true 显示,hidden 是遇 false 显示. wx:if 在隐藏的时候不渲染,而 hidden 在隐藏时仍然渲染,只是不呈现. 所以如果频繁切换的话,用 wx:if 将会消耗更多资源,因为每次呈现的时候他都会渲染,每次隐藏的时候,他都会销毁. 如果切换并不频繁的话,用 wx:if 相对来说较好些,因为它会避免初始就一下渲染那么多. wxml: <view> <text>page

微信小程序:wx.request之post请求后端无法获取数据的问题

前言:小程序的开发中总是踩到各种坑,看文档也不知所云: 例如当我们在写微信小程序接口时,method请求方式有POST和GET两种,为了数据安全,我们会偏向于使用POST请求方式访问服务器端: 问题:当我们使用POST方式请求时,后端无法获取数据,但使用GET方式便可以获取数据?? 解决办法: 设置请求的 header: header: { "Content-Type": "application/x-www-form-urlencoded" }, 例如:

微信小程序之wx.requestPayment 发起微信支付

wx.requestPayment 发起微信支付 timeStamp 时间戳 nonceStr 随机字符串 package 统一下单接口返回的 prepay_id 参数值 signType 签名算法 paySign 支付签名 success 接口成功回调 fail 接口失败回调 complete 接口完成回调(成功,失败都执行) 1.先调用后台接口,生产基本数据 // 获取店铺信息 Api.BalancePay({ openid: openid, amount: amount, bid: bid

微信小程序-wx:for 循环列表

获取了 N 条信息(具体有多少条不确定),如何在界面中动态呈现出来呢? .wxml 代码 <view wx:for="{{items}}" wx:for-index="index" wx:for-item="item">{{index+1}}.{{item.title}}</view> 核心代码就是 wx:for,对应一个数组. 而 wx:for-index 指明后面如果要用数组索引的话,           用什么名字,

微信小程序之wx.showmodal

1. . wx.showModal({ title: "2222步", content: currentCache ? "确定为自己城市添加步数吗" : "确定取消为自己城市添加步数吗?", showCancel: true, cancelText: "取消111", cancelColor: "#000", confirmText: "确定", confirmColor: "

微信小程序 之wx.getLocation()获取地理信息中的小坑

提到wx.getLocation()这个方法,大家都知道是获取地理信息的 今天用这个方法获取定位经纬度后传给后台取得附近markers标记集合, 在开发工具上都正常有标记出现 ,但是在手机测试时,死活没有显示 , 最后发现是在手机测试时,后台已经报参数不合法抛出错误通知了 原因是因为,在开发工具上获取经纬度只有小数点后5位,而我们传给后台接口的数据规定只有后6位, 这在开发工具上是正常可以请求成功,但是在手机上测试时,定位更加精确,例如"longitude":"121.534