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

  1. var isEmptyObject = function (e) {
  2. var temp;
  3. for (temp in e)
  4. return !;
  5. return !
  6. }

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

  1. onLoad: function () {
  2. var that = this;
  3. if (app.globalData.userInfo) {
  4. this.setData({
  5. userInfo: app.globalData.userInfo
  6. })
  7. } else if (this.data.canIUse) {
  8. // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
  9. // 所以此处加入 callback 以防止这种情况
  10. app.userInfoReadyCallback = res => {
  11. this.setData({
  12. userInfo: res.userInfo
  13. })
  14. }
  15. } else {
  16. // 在没有 open-type=getUserInfo 版本的兼容处理
  17. wx.getUserInfo({
  18. success: res => {
  19. app.globalData.userInfo = res.userInfo
  20. this.setData({
  21. userInfo: res.userInfo
  22. })
  23. that.checkSettingStatu();
  24. },
  25. fail: function () {
  26. wx.showModal({
  27. title: '用户未授权',
  28. content: '如需正常使用该小程序功能,请按确定并在授权管理中选中“用户信息”,然后点按确定。最后再重新进入小程序即可正常使用。',
  29. showCancel: false,
  30. success: function (resbtn) {
  31. if (resbtn.confirm) {
  32. wx.openSetting({
  33. success: function success(resopen) {
  34. // 获取用户数据
  35. that.checkSettingStatu();
  36. }
  37. });
  38. }
  39. }
  40. })
  41. }
  42. })
  43. }
  44. }

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

  1. checkSettingStatu: function (cb) {
  2. var that = this;
  3. // 判断是否是第一次授权,非第一次授权且授权失败则进行提醒
  4. wx.getSetting({
  5. success: function success(res) {
  6. var authSetting = res.authSetting;
  7. if (isEmptyObject(authSetting)) {
  8. //第一次
  9. } else {
  10. // 没有授权的提醒
  11. if (authSetting['scope.userInfo'] === false) {
  12. wx.showModal({
  13. title: '用户未授权',
  14. content: '如需正常使用该小程序功能,请按确定并在授权管理中选中“用户信息”,然后点按确定。最后再重新进入小程序即可正常使用。',
  15. showCancel: false,
  16. success: function (res) {
  17. if (res.confirm) {
  18. wx.openSetting({
  19. success: function success(res) {
  20. console.log()
  21. }
  22. });
  23. }
  24. }
  25. })
  26. } else if (authSetting['scope.userInfo'] === true) {
  27. //该处用户获取用户的一些授权信息
  28. if (that.data.userInfo) {
  29. var nickname = that.data.userInfo.nickName;
  30. var gender = that.data.userInfo.gender
  31. //性别 0:未知、1:男、2:女
  32. if (gender == ) {
  33. gender = "True"
  34. } else if (gender == ) {
  35. gender = "False"
  36. } else {
  37. gender = "True"
  38. }
  39.  
  40. }
  41. }
  42. }
  43. }
  44. })
  45. }

简单的记录,不喜勿喷。

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

  1. 微信小程序-form表单-获取用户输入文本框的值

    微信小程序-form表单-获取用户输入文本框的值 <input name='formnickname' class="textarea" placeholder=" ...

  2. 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2

    今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 查官方文档 解决方法 在 PowerShell中运行以下内容, 然后重启服务器 # Enab ...

  3. 微信小程序遍历wx:for,wx:for-item,wx:key

    微信小程序中wx:for遍历默认元素为item,但是如果我们设计多层遍历的时候我们就需要自定义item的字段名以及key的键名 wx:for="{{item.goodsList}}" ...

  4. 微信小程序登录流程及解析用户openid session_key,获取用户信息

    为优化用户体验,使用 wx.getUserInfo 接口直接弹出授权框的开发方式将逐步不再支持.从2018年4月30日开始,小程序与小游戏的体验版.开发版调用 wx.getUserInfo 接口,将无 ...

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

    条件渲染 顾名思义所谓的条件渲染,就是通过条件来判断是否需要渲染该代码块.条件渲染主要是用到wx:if 和 block wx:if 这两个,第一个相信好理解,第二个是在block里面进行条件渲染,这里 ...

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

    以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx ...

  7. 【微信小程序】wx.openLocation调取失败

    在调取地图的时候发现,wx.openLocation的方法在模拟器和安卓手机上都可以用,在苹果手机上报错. 报错为调取失败:fail invoke too frequently             ...

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

    wx:if 与 hidden 都可以控制微信小程序中元素的显示与否. 区别: wx:if 是遇 true 显示,hidden 是遇 false 显示. wx:if 在隐藏的时候不渲染,而 hidden ...

  9. 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常

    新版开发者工具增加了https检查功能:可使用此功能直接检查排查ssl协议版本问题: 可能原因:0:后台域名没有配置0.1:域名不支持https1:没有重启工具:2:域名没有备案,或是备案后不足24小 ...

随机推荐

  1. Linux 下硬链接和软链接的说明

    Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln 命令产生硬链接. 硬连接 硬连接指通过索引节点来进行连接.在 Li ...

  2. Caffe初试

    1.基本概念 Caffe是一个比较流行的神经网络框架,它支持C++.Python等语言,容易上手,但是代码貌似不怎么好读,等有空我...;) 2.Windows10下的部署 我把我Windows下的编 ...

  3. mysql-5.7.17的最新安装教程

    mysql-5.7.17-winx64是现在最新版本的Mysql,这是免安装的,所以要进行些配置 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mys ...

  4. mvp和mvc的区别

    一句话总结:你代码逻辑有没有写在View中的,有就是MVC,没有就是MVP MVP模式: View不直接与Model交互,而是通过与Presenter交互来与Model间接交互 Presenter与V ...

  5. 剑指offer--28.栈的压入、弹出序列

    时间限制:1秒 空间限制:32768K 热度指数:300132 本题知识点: 栈 算法知识视频讲解 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假 ...

  6. Mac安装并破解StarUML

    1.下载与安装这里不做赘述,直接去官网下载即可 http://staruml.io/ 2.关键的事情来了,破解 一.打开安装包的目录 cd /Applications/StarUML.app/Cont ...

  7. c++ 霍夫变换检测直线

    通常这是一幅边缘图像,比如来自 Canny算子.cv:: Houghlines函数的输出是cV::Vec2f向量,每个元素都是一对代表检测到的直线的浮点数(p,0).在下例中我们首先应用 Canny算 ...

  8. 同一局域网环境下的arp欺骗和中间人攻击(mac)

    最近读了一篇有关arp欺骗和中间人攻击的文章,于是乎就想着自己实现一下,顺便验证下微信在回话劫持后的安全性. 1.本机环境 Macbook Air:OS X 10.11 El Captain 2.推荐 ...

  9. NETCore中RabbitMQ的使用

    NET中RabbitMQ的使用 https://www.cnblogs.com/xibei666/p/5931267.html 概述 MQ全称为Message Queue, 消息队列(MQ)是一种应用 ...

  10. vc++ windows 快速启动栏创建快捷方式

    创建快速启动栏 在windows软件开发中,软件安装过程中总是需要在快速启动栏创建快捷方式,下面介绍一种快速启动栏创建快捷方式的方法,具体代码如下:(该方法不支持win10,目前还没有找到win10的 ...