小白上路~微信小程序登录授权无法获取用户信息

2023-11-16

1. button 标签和 open-type=“getUserInfo” 获取用户信息失败

天哪噜,必须好好记录一番由于没有看官方文档更新 api 而导致的 “BUG” !!!

一觉醒来,发现准备收尾的小程序无法获取到用户信息了???怎么回事,于是一顿焦虑 + 骚操作,各种找 BUG

这种用户信息,获取了个寂寞啊???
在这里插入图片描述
贴出原代码:

wxml:

<button bindgetuserinfo="handleGetuserInfo" open-type="getUserInfo">
      登录
</button>

js:

    handleGetuserInfo(e) {
        var that = this
        console.log("handlegetuserinfo:", e)

        // 2 用于前端显示
        const {
            userInfo
        } = e.detail;
        wx.setStorageSync('userInfo', userInfo)
        //访问数据库
        that.login()
    },

2. 改用 button 标签 和 wx.getUserProfile() 成功获取用户信息

查看官方文档更新日志
在这里插入图片描述
参照文档修改代码如下:
wxml:

    <button  bindtap="getUserProfile">
      登录
    </button>

js:

        // 新版获取用户信息
    getUserProfile(e) {
        var that = this
        wx.getUserProfile({
            desc: '用于完善用户资料',
            success: (res) => {
                this.setData({
                // 此处左边的 userInfo 是js data 中定义的全局变量
                // res.userInfo 是调用接口返回的数据
                    userInfo: res.userInfo
                })
                // 将得到的用户信息 userInfo 保存到缓存中
                wx.setStorageSync('userInfo', this.data.userInfo)
                // 输出检查看看
                console.log("getuserProfile:", res.userInfo)
                //调用自定义的 login() 方法访问数据库,将用户信息保存到数据库
                that.login()
            }
        })
    },
    // 登录
    login() {
    	// 获取缓存中的用户信息
        const userInfo = wx.getStorageSync('userInfo');
        console.log("userInfo:", userInfo)
		
		// 如果缓存中有用户信息
        if (userInfo) {
            //  获取微信小程序登陆成功后的code
            wx.login({
                timeout: 500,
                success: (result) => {
                    // 1 成功取得 code
                    const {
                        code
                    } = result;
                    console.log("code:", code)

                    // 2 发送请求到后台 换取 openid
                    // 这里 request() 是自己封装的 es6 的 promise 的方式,读者可以直接使用 wx.request() 
                    request({
                            url: app.globalData.url + '/index.php/code',
                            data: {
                                code: code
                            },
                            method: 'get',
                        })
                        .then(res => {
                            this.setData({
                                openid: res.data.openid,
                            })
                            //将 openid 保存到缓存中
                            wx.setStorage({
                                key: 'openid',
                                data: res.data.openid
                            })
                            // 将用户信息保存到数据库表中
                            request({
                                    url: app.globalData.url + '/index.php/login',
                                    data: {
                                        u_nickName: userInfo.nickName,
                                        u_sex: userInfo.gender,
                                        u_imgUrl: userInfo.avatarUrl,
                                        u_openid: res.data.openid
                                    },
                                    method: "get"
                                })
                                .then(res => {
                                    console.log(res)
                                    if (res.data.msg == "success") {
                                        wx.showModal({
                                            content: '登录成功
                                            showCancel: false,
                                        })
                                        // 登录成功后刷新当前页面,以显示用户信息和用户数据
                                        this.onShow();
                                    }
                                })
                        })
                },
            })
        }

    },

成功获取用户信息:
在这里插入图片描述
要是大家发现一直没有问题的代码突然出现了意料之外的 BUG ,一波排除后,可以看看官方文档更新日志,说不定和我一样,发现是 api 的锅呢? Gook Luck !

By the way~~ 不知道是不是有人和我一样不知道可以这样查看日志:
在这里插入图片描述
若有不正确之处,请指正~ 谢谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小白上路~微信小程序登录授权无法获取用户信息 的相关文章

  • 如何在一段特定时间后在后台运行 ajax 调用? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在一段特定的时间后显示警报消息 您想继续吗 如果用户同意 则 ajax 调用必须在后台运行 否则取消 ajax 调用 那么请告诉我
  • 如何将函数传递给 JavaScript Web Worker

    我想通过一个 或多个 函数传递postMessage 给网络工作者 因为我无法引用常规文件 为了启动 Web Worker 我将一个对象 URL 从 Blob 创建 传递给Worker构造函数 然后我传递一条消息 但到目前为止还没有在消息中
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • 自动生成PHP代码的策略?

    我正在开发一个框架 在后端创建 ER 图后 该框架可以动态地对自身的各个部分进行编程 作为一名 PHP 新手 我想知道是否还有比打开一个纯 xyz php 文本文件然后将动态生成的代码添加到该文件更奇特的事情 是的 尝试一下Zend Cod
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • 如何检查元素的内容是否为空,如果是,则在 jquery 中删除该元素

    我目前正在尝试选择某个 div 内没有内容的任何 h2 元素并将其删除 这是我的 html 代码 div class skipToContainer h2 class vidSkipTo Hello h2 h2 class vidSkipT
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • 纠正装饰器模式的一个大缺点

    不久前 我在重构一些游戏战斗代码时决定尝试装饰器模式 战斗者可以拥有各种被动能力 也可能是不同类型的生物 我认为装饰器可以让我在运行时以各种组合添加行为 因此我不需要数百个子类 我几乎已经完成了 15 个左右的被动能力装饰器 在测试中我发现
  • 如何生成 JavaScript 堆栈跟踪? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 关于如何以跨浏览器的方式在 javascript 中生成堆栈跟踪有什么建议吗 较新的浏览器 Chrome 和 Firefox 公开了一个允
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • 父指令属性更改时子指令不会更新

    这是对这两个问题的后续 在父指令和子指令之间传递参数 https stackoverflow com questions 42814530 pass argument between parent and child directives
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • 如何使用 Jest 测试对象键和值的相等性?

    我有一个mapModule我在其中导入组件并导出它们 import ComponentName from components ComponentName export default name ComponentName 我该如何测试ma
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • Angular 2访问组件内的ng-内容

    我怎样才能访问 content 来自组件类本身的组件 我想做这样的事情
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph

随机推荐

  • 修改NuGet下载包后存放的默认路径

    NuGet默认下完包后就放在C盘 我们给他改一下 NuGet的默认目录配置文件在C Users yourName AppData Roaming NuGet NuGet Config 加一下这个配置 我放在了D盘 你可以看情况自己改
  • 【Hadoop技术篇】hadoop的使用

    博主介绍 博主介绍 大家好 我是淼淼 喵 很高兴认识大家 主攻领域 大数据开发 数据仓库 ETL 数据分析 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论 一起进步 欢迎评论 作者水平有限 欢迎各位大佬指点 相
  • 沐神《动手学深度学习》报错 解决方案RuntimeError: DataLoader worker (pid(s) ...) exited unexpectedly

    3 6 softmax回归的从零开始实现 运行 print evaluate accuracy net test iter 报了一溜错误 其中最后一行为 RuntimeError DataLoader worker pid s 5052 1
  • 包和 jar 文件的创建

    前言 在之前的文章中 讲到了面向的 3 大特性 封装 继承 多态 和面向对象设计的 5 大原则 SRP OCP LSP DIP ISP 此外 我们还讲了如何创建一个类 并且在创建类后如何构造一个对象 然后还介绍了类中的属性和方法 并对构造方
  • 方程组线性化方法和牛顿迭代法基础

    方程组线性化方法和牛顿迭代法基础 非线性方程组线性化和牛顿迭代法 参考书籍 GPS原理与接收机设计 谢钢 非线性方程 就是因变量与自变量之间的关系不是线性的关系 这类方程很多 例如平方关系 对数关系 指数关系 三角函数等等 求解此类方程往往
  • ESP-NOW:竟然还有如此好用的无线通信方式

    用 Arduino 玩转 ESP32 系列历史文章目录 ESP32 概述与 Arduino 软件准备 ESP32 GPIO接口编程入门 蓝牙翻页笔 蓝牙键盘与PPT 控制器 B 站粉丝计数器 Siri 语音识别控制 LED 灯 Siri 语
  • eclipse 关于报错Error creating bean with name ‘xxxxx‘: Invocation of init method....

    网上查找的资料是这种异常一般都是包导错了 缺失 冲突 版本错误都可能 由于再报这个错之前我进行了添加删除修改pom xml文件 右键项目 gt maven gt update project project gt clean等这些对于项目整
  • C语言模拟实现atoi函数

    atoi函数 主要功能是将一个字符串转变为整数 例如将 12345 gt 12345 但在实现过程中 我们难免会因为考虑不够全面而漏掉比较重要的几点 今天就总结一下实现atoi函数需要注意的地方 1 指针为NULL 2 字符串为空字符串 3
  • etcd的简单使用

    etcd的简单使用 ETCD安装配置 安装 去https github com coreos etcd releases 下载想要的版本解压etcd包 解压后进入目录 增加x权限 chmod x etcd chmod x etcdctl 并
  • MySQL5.7安装报错:GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM

    根据官方文档使用yum安装MySQL5 7 添加mysl comunity repo如下 mysql57 community name MySQL 5 7 Community Server baseurl http repo mysql c
  • [Docker]进入容器命令

    docker exec it api bin bash docker exec it api bin sh
  • JVM入门教程

    文章目录 简介 1 Java内存区域 1 1 程序计数器 1 2 Java虚拟机栈 1 3 本地方法栈 1 4 Java堆 1 5 方法区 1 6 运行时常量池 1 7 直接内存 2 HotSpot虚拟机 2 1 对象的创建 2 2 对象的
  • MyISAM和InnoDB区别关联详解

    Mysql架构 什么存储引擎 MySQL和InnoDB对比1 2 总结 Mysql存储架构 从上图可以发现 MySQL由以下几部分组成 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲 Cache 组件 插件
  • C++引用,四区和函数

    引用变量 四区 函数 没有函数重载 代码区 全局区 堆区和栈区 代码区 全局区 栈区 堆区 new操作符 引用 函数的默认参数 函数的占位参数 代码区 全局区 堆区和栈区 注意 其中代码区和全局区是运行前的 栈区和堆区是运行后的 即如果ex
  • 微信小程序实现举报功能

    一 后台接口 userController java 前端接收一个usersReportd对象 包含数据如下 PostMapping reportUser public IMoocJSONResult reportUser RequestB
  • React Hooks

    Facebook团队对社区上的MVC框架都不太满意的情况下 开发了一套开源的前端框架react 于2013年发布第一个版本 react最开始倡导函数式编程 使用function以及内部方法React creactClass创建组件 之后在E
  • 第二章 系统设置及基本操作

    第二章 系统设置及基本操作 使用GNOME桌面套件中的首选项设置及系统管理工具执行以下任务 一 为第一块网卡设置静态IP地址 并能够与同网段中的其他主机相互通信 步骤 1 点击 系统 管理 网络 打开 网络配置 窗口 如图所示 2 在 配置
  • 华为od机试 C++ 猜字谜

    题目 玩家看到的是个错乱的单词 像 nesw 这样 他们要做的就是从一大堆备选的单词中 猜出这个错乱单词原来的模样 怎么才算猜对了呢 有两种可能 把错乱单词的字母重新排列一下 如果跟备选单词一模一样 那就对了 例如 nwes 重新排列就是
  • CTFshow 命令执行 web34

    源码
  • 小白上路~微信小程序登录授权无法获取用户信息

    1 button 标签和 open type getUserInfo 获取用户信息失败 天哪噜 必须好好记录一番由于没有看官方文档更新 api 而导致的 BUG 一觉醒来 发现准备收尾的小程序无法获取到用户信息了 怎么回事 于是一顿焦虑 骚