微信更新api后,wx.getUserInfo在开发和体验版本都不能弹出授权窗口。微信文档说明:

注意:此接口有调整,使用该接口将不再出现授权弹窗,请使用 <button open-type="getUserInfo"></button> 引导用户主动进行授权操作

  1. 当用户未授权过,调用该接口将直接报错
  2. 当用户授权过,可以使用该接口获取用户信息

对此,给出以下解决方案。

wx.getUserInfo({
withCredentials: true,
success: function (res) {
//此处为获取微信信息后的业务方法
 
},
fail: function () {
//获取用户信息失败后。请跳转授权页面
wx.showModal({
title: '警告',
content: '尚未进行授权,请点击确定跳转到授权页面进行授权。',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定')
wx.navigateTo({
url: '../tologin/tologin',
})
}
}
})
}
})

调取该方法失败后跳转到授权页面。

授权页面加入

<button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>

并在js中,加入这个方法

bindGetUserInfo: function(e){
var that = this;
//此处授权得到userInfo
console.log(e.detail.userInfo);
//接下来写业务代码
//最后,记得返回刚才的页面
wx.navigateBack({
delta: 1
})
}

至此,即可完成引导用户手动授权的过程。解决此次更新api所带来的问题。

转自:https://blog.csdn.net/xishuchen0520/article/details/80410861


【关于微信小程序登录信息】 微信即将不再支持wx.getUserInfo() 授权弹出框 2018年5月12日

转自:https://blog.csdn.net/u013408059/article/details/80291239

先看一张图: 这是地址:点击打开链接

显示微信可能处于安全考虑,这个方法已经不能用于自动获取用户信息了,

大致意思就是:

以前这个方法 如果用户未授权获取用户信息, 你调用这个wx.getUserInfo() , 小程序会弹出一个授权的弹出框。类似:

然后你再去

this.globalData.userInfo = res.userInfo,去获取用户信息

但是!!!

现在的意思是: 你直接调用这个方法依旧可以获取用户信息, 但是如果你之前没有点击过那个授权的小弹出框,这个方法就直接报错了,需要你直接去引导用户去授权。

那么怎么授权呢,

说的很明显,你需要一个button去弹出这个授权框框,引导用户去授权。

这个button怎么看呢,无非就是写一个点击事件,button必须设置一个属性:open-type='getUserInfo' ,设置好了之后,你点击这个button就会弹出这个授权框,然后你在调用wx.getUserInfo() 就会获取信息啦,方法吧。

记录一下。

wx.getUserInfo({
success: res => {
console.log(123);
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
} ,
            fail:res=>{
// 获取失败的去引导用户授权
 
})

怎么查询授权信息呢:微信同样给了答案,
https://developers.weixin.qq.com/miniprogram/dev/api/setting.html#wxgetsettingobject

判断这个玩意下面的userInfo ;

你以为这样就完了?我查阅了这个玩意儿的属性表:

whf??!!!

===============2018年5月16日20:28:11============

下面这个就不要看了,微信社区中回复或这是他们失误没去掉, 大家以后继续用就行.

显示废弃了!:

我是不知道怎么弄了。大不了就不去查询授权信息了,直接查询userinfo是不是非空不就得了。。。。

===============2018年5月16日20:28:14===========

以上。

===========================================================================

拒绝授权返回信息:

{
"type": "getuserinfo",
"timeStamp": 6012,
"target": {
"id": "",
"offsetLeft": 0,
"offsetTop": 380,
"dataset": {}
},
"currentTarget": {
"id": "",
"offsetLeft": 0,
"offsetTop": 380,
"dataset": {}
},
"detail": {
"errMsg": "getUserInfo:fail auth deny"
}

}

授权之后的返回信息格式:

{
"type":"getuserinfo",
"timeStamp":123686,
"target":{
"id":"",
"offsetLeft":0,
"offsetTop":380,
"dataset":{
}
},
"currentTarget":{
"id":"",
"offsetLeft":0,
"offsetTop":380,
"dataset":{
}
},
"detail":{
"errMsg":"getUserInfo:ok",
"rawData":"{}",
"userInfo":{
"nickName":"王**",
"gender":1,
"language":"zh_CN",
"city":"Haidian",
"province":"Beijing",
"country":"China",
"avatarUrl":""
},
"signature":"",
"encryptedData":"",
"iv":""
}

}

总之还是去看文档吧,比较良心了。

微信公众平台userinfo信息格式


微信小程序~wx.getUserInfo逐渐废弃,小程序登录过程优化

很多的时候我们在做小程序应用的时候,希望用户在使用小程序前进行登录授权,之前登录后通过wx.getUserInfo直接弹出授权的登录方式官方的意思是将不再支持,而是让用户通过下面的方式授权用户信息

<button open-type="getUserInfo" bindgetuserinfo="getUserInfoAction">授权用户信息</button>
这样的话当小程序在使用前一定需要用户登录,或者已经进行到需要用户登录的操作时;这样的话就需要一个button授权页面。这种改变,感觉个人还是喜欢默认弹层的的授权方式,这个方式可能一时不适应吧,有种排斥。
下面是通过button授权的方式做的一个登录:这里我只是展示了login.js 与 index.js 过程,有不对或者不好的地方欢迎加群交流指正。
login.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const ajax = require("../../common/ajax.js")
const tips = require("../../common/tips.js")
Page({
  /**
   * 页面的初始数据
   */
  data: {
 
  },
 
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let that = this;
     
  },
  getUserInfoAction(res){
    let that = this;
    const encryptedData = res.detail.encryptedData;
    const iv = res.detail.iv;
 
    if (encryptedData && iv){
      // console.log("允许")
      that.login().then((login)=>{
 
        const params = {
          "code": login.code,
          "encryptedData": encryptedData,
          "iv": iv,
          "type": "small_wechat"
        }
 
        ajax.posts(params, "api/passport/thirdSign").then((res) => {
          
          let userinfo = {
            avatar: res.data.data.avatar,
            nickname: res.data.data.nickname,
            token: res.data.data.token,
            user_id: res.data.data.user_id
          }
          wx.setStorageSync("userinfo", userinfo);
 
          // console.log(wx.getStorageSync("userinfo"));
          if (wx.getStorageSync("userinfo")){
            wx.redirectTo({
              url: '/page/index/index'
            })
          }
           
 
           
        }).catch((errMsg) => {
          tips.showToast("网络连接失败", "none")
          console.log(errMsg)
        })
 
      }).catch((errMsg) => {
        console.log("登录:" + errMsg)
      })
 
    }else{
      // console.log("拒绝")
      tips.showToast("请授权公开信息,登录小程序", "none")
    }
 
  },
  login(){
    // 登录
    let promise = new Promise((resolve, reject) => {
      wx.login({
        success: function (res) {
          if (res.code) {
            resolve(res)
          } else {
            tips.showToast("登录失败", "none")
          }
        },
        fail: function (err) {
          reject(err)
        }
      })
 
    })
    return promise;
  }
})

index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const tips = require("../../common/tips.js")
Page({
 
  /**
   * 页面的初始数据
   */
  data: {
     
  },
 
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let that = this;
    if (!wx.getStorageSync("userinfo")) {
      //是否登录
      that.isloginindex()
    }
 
  },
  isloginindex() {
    //是否进入首页
    if (wx.getStorageSync("userinfo")) {
      console.log("登录")
    } else {
      //无信息
      console.log("否登录")
      wx.redirectTo({
        url: '/page/login/login'
      })
    }
  }
})
 
 通过button open-type="getUserInfo"的方式授权登录小程序流程,还没有想到一个更好的办法,目前是这么干的;如果有不对或者更好方式的欢迎指正或者一起交流
 

***小程序wx.getUserInfo不能弹出授权窗口后的解决方案的更多相关文章

  1. 微信小程序~wx.getUserInfo逐渐废弃,小程序登录过程将如何优化?

    很多的时候我们在做小程序应用的时候,希望用户在使用小程序前进行登录授权,之前登录后通过wx.getUserInfo直接弹出授权的登录方式官方的意思是将不再支持,而是让用户通过下面的方式授权用户信息 & ...

  2. 小程序wx.getUserInfo获取用户信息方案介绍

    问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本 API和组件 - -   - -     背景 小程序一个比较重要的能力就是获取用户信息,也就是使用 wx.g ...

  3. .NET 小程序 wx.getUserInfo(OBJECT) 解密 encryptedData 来获取UnionId

    在小程序中通过 wx.getUserInfo 获取用户信息,而UnionId 只有关主了公众号才会返回,不关注公众号想获取UnionId则需要我们从返回的 encryptedData 中解码从而获取U ...

  4. 微信小程序之自定义底部弹出框动画

    最近做小程序时,会经常用到各种弹框.直接做显示和隐藏虽然也能达到效果,但是体验性太差,也比较简单粗暴.想要美美地玩,添加点动画还是非常有必要的.下面做一个底部上滑的弹框. wxml <view ...

  5. 微信小程序组件 加减号弹出框

    <!-- 点击立即抢拼弹出框 --> <view class='add-rob' bindtap="setModalStatus" data-status=&qu ...

  6. 微信小程序wx.switchTab跳转到tab页面后onLoad里面的方法不执行

    相信大家在做小程序的时候启动页跳转到tab首页会用到switchTab 但是在跳转后发现页面模块不全,后面console.log()后发现是onLoad里面的方法不执行 解决这种问题的方法页有很多中, ...

  7. USB调试不能弹出授权窗口 unauthorized 的解决办法

    今天把 AndroidStudio 1.5 给卸载了,重新安装 2.1版本,据说速度快了很多,结果手机一直没法授权调试,授权USB调试信任PC设备的窗口始终没看到,网上找了好多方法,什么驱动.重启.各 ...

  8. 微信小程序 wx.getUserInfo 解密 C# 代码

    花了6小时,弄出来的代码.网上的是PHP代码 public static string DecodeUserInfo(string raw, string signature,string encry ...

  9. 微信小程序 wx.getUserInfo 解密 C# 代码 - 转

    public static string DecodeUserInfo(string raw, string signature,string encryptedData, string iv) { ...

随机推荐

  1. 【转】模块(configparser+shutil+logging)

    [转]模块(configparser+shutil+logging) 一.configparser模块 1.模块介绍 configparser用于处理特定格式的文件,其本质上是利用open来操作文件. ...

  2. Python-查找两个文件中相同的ip地址

    with open("testt","r") as f1: list1 = f1.readlines() print(list1) list1 = set(li ...

  3. qemu中使用9p,支持host和guest中共享目录【转】

    转自:https://blog.csdn.net/ayu_ag/article/details/52956351 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...

  4. 搭建Unity安卓开发环境

    原文见 https://blog.csdn.net/chenggong2dm/article/details/20654075 tiny教程 https://docs.unity3d.com/Pack ...

  5. Unity3D之Mesh(四)绘制多边形

    来自https://www.cnblogs.com/JLZT1223/p/6086191.html 1. 总的来说绘制平面的思想十分简单,就是将需要的平面拆分成几个三角形然后进行绘制就可以啦,主要的思 ...

  6. 出现警告“user1 不在 sudoers 文件中。此事将被报告。”

    linux中不是每个用户都有sudo权限. 在/etc/下有个文件sudoers 由此文件可知只有用户为sudo这个组的成员之后才能执行sudo命令 此时,我们查看用户user1的属性: 由此看出us ...

  7. Docker从0开始之部署一套2048小游戏

    本文记录一下在docker部署一套2048小游戏的过程,在娱乐中熟悉docker的应用部署.docker 安装不在本文讲述之中,参考我的其它博客. 1.获取image镜像. 方法一:daocloud. ...

  8. 1)requests模块

    一:requests 介绍 requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装, 从而使得Pyt ...

  9. Go语言中的byte和rune区别、对比

    Go语言中byte和rune实质上就是uint8和int32类型.byte用来强调数据是raw data,而不是数字:而rune用来表示Unicode的code point.参考规范: uint8 t ...

  10. 洛谷P4630 [APIO2018]铁人两项 [广义圆方树]

    传送门 又学会了一个新东西好开心呢~ 思路 显然,假如枚举了起始点\(x\)和终止点\(y\),中转点就必须在它们之间的简单路径上. 不知为何想到了圆方树,可以发现,如果把方点的权值记为双联通分量的大 ...