uniapp在小程序中登录,获取用户信息,获取手机号逻辑记录

news2025/1/22 19:36:50

这里写目录标题

  • 概述
  • uniapp小程序的授权描述
  • 授权的详细说明及使用
    • 1、微信小程序通过`uni.login()`方法可以获取到微信提供的`code`
    • 2、通过登录获取的`code`码可以以获取用户唯一标识`openid`以及会话密钥`sessionkey`用于解密获取手机的加密信息
    • 3、通过微信提供的获取微信手机号的方法`getphonenumber`拿到`encryptedData` `iv`两个字段的内容
    • 4、通过微信提供的解密方法:可以拿到最终的手机号
    • 5、获取用户的头像,昵称等直接调用`uni.getUserProfile()`方法即可

概述

在uniapp开发微信小程序的过程中,需要在微信端登录,获取用户的信息(头像,昵称内容,手机号),为了方便用户,直接通过微信授权的方式进行登录获取,免去了app中需要注册然后登录输入密码获取验证码等一些列的繁琐步骤。

uniapp小程序的授权描述

1、微信小程序通过uni.login()方法可以获取到微信提供的code
2、通过登录获取的code码可以以获取用户唯一标识openid以及会话密钥sessionkey用于解密获取手机的加密信息
3、通过微信提供的获取微信手机号的方法getphonenumber拿到encryptedData iv两个字段的内容
4、通过微信提供的解密方法:可以拿到最终的手机号
5、获取用户的头像,昵称等直接调用uni.getUserProfile()方法即可

注意:本步骤不设计相关业务的逻辑描述,只是获取微信的用户信息,具体的业务逻辑和前后端的操作以自己本身业务为准。

授权的详细说明及使用

下面详细的说一下每个步骤的内容有哪些,需要哪些信息,返回哪些信息

1、微信小程序通过uni.login()方法可以获取到微信提供的code

uni.login()是调用接口获取登录凭证code
uiniapp-api登录文档:https://uniapp.dcloud.io/api/plugins/login.html#login

<view @click="login">登录</view>
login(){ // 获取登录凭证
				uni.login({
				    provider: 'weixin',
				    success: res => {
						console.log(res)
						this.login_code = res.code // 获得的code
					}
				    
				});
			}

下面是返回的内容
在这里插入图片描述

2、通过登录获取的code码可以以获取用户唯一标识openid以及会话密钥sessionkey用于解密获取手机的加密信息

【登录凭证校验】请求微信服务器文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html#%E8%AF%B7%E6%B1%82%E5%9C%B0%E5%9D%80

注意:该步骤向腾讯发送请求需要以下参数

appid:小程序appid获取要在微信公众平台登录你的小程序,然后在开发管理-开发设置里面获取
secret:secret为AppSecret(小程序密钥) ,在小程序 - 开发者管理 - 开发设置中生成获取
js_code:在第一步调用接口获取的登录凭证code
grant_type:默认填写authorization_code即可

请求成功获得的数据(用于解密等作用)

openid:得到用户唯一标识
session_key:得到会话密钥

<view class="" @click="get_miyao">获取密钥sessionkey</view>
get_miyao(){ // 获取密钥 === 需要登录才可以获取密钥
				uni.request({
				    url: 'https://api.weixin.qq.com/sns/jscode2session',// 请求微信服务器
				    method:'GET',
				    data: {
						appid: '这里是你的小程序aphid',        //你的小程序的APPID
						secret: '这里是你小程序生成的密钥',    //你的小程序秘钥secret,  
						js_code: '第一步登录拿到的code',    //wx.login 登录成功后的code
						grant_type:'authorization_code'
				    },
				    success: (res) => {
				        console.log('获取信息',res);  // 换取成功后 暂存这些数据 留作后续操作
				        this.openid=res.data.openid    //openid 用户唯一标识
				        this.session_key=res.data.session_key    //session_key  会话密钥
				    }
				});
			},

下面是返回的内容
在这里插入图片描述

3、通过微信提供的获取微信手机号的方法getphonenumber拿到encryptedData iv两个字段的内容

使用button来获取手机号官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/button.html
获取手机号方法官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

如下:通过调用获得的数据

code:手机的code动态令牌。可通过动态令牌换取用户手机号。
encryptedData:第四步需要解密的字段 === 可获得手机号
iv:第四步需要解密的字段 === 可获得手机号

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取电话</button>
getPhoneNumber(res){ // 获取手机号
				console.log(res)
				this.phone_code = res.detail.code // 获得的手机code
				this.phone_encryptedData = res.detail.encryptedData //用于解密
				this.phone_iv = res.detail.iv // 用于解密
				
			},

下面是返回的内容
在这里插入图片描述

4、通过微信提供的解密方法:可以拿到最终的手机号

下载引入的文件链接地址
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
在这里插入图片描述
解密需要的内容

appID:小程序的appid
session_key:第二步返回的会话密钥
encryptedData:第三步返回的内容
iv:第三步返回的内容

<view @click="jiemi">点击解密</view> 
import WXBizDataCrypt from "@/static/wx/WXBizDataCrypt.js" // 需要引入
jiemi(){ // 解密需要appid 会话密钥;然后需要手机号的加密字段
				let pc = new WXBizDataCrypt('这里是appid',this.session_key);
				let data = pc.decryptData(this.phone_encryptedData , this.phone_iv);  
				console.log(data)       //data就是最终解密的用户信息  
				this.phone = data.phoneNumber // 手机号
			}

下面是返回的内容
在这里插入图片描述

5、获取用户的头像,昵称等直接调用uni.getUserProfile()方法即可

官方调整说明:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?highLine=login
官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html#%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81

<view class="" @click="get_user">获取用户信息</view>
get_user(){ // 获取用户信息
				uni.getUserProfile({
					desc: '用户登录',
					success: res => {
						console.log(res)// 用户的信息
						this.user_img = res.userInfo.avatarUrl //微信头像
						this.user_name = res.userInfo.nickName // 微信昵称
					}
				})
			},

以下是返回的内容
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ELK企业级日志分析平台(二)

文章目录一、kibana数据可视化1.部署2.定制数据可视化&#xff08;1&#xff09;网站访问量&#xff08;2&#xff09;访问量排行榜&#xff08;3&#xff09;创建dashboard&#xff0c;大屏展示二、ES集群监控1.启用xpack认证2.metricbeat监控3.filebeat日志采集一、kibana数据…

【玩转CSS】一文带你了解浮动

&#x1f525;一个人走得远了&#xff0c;就会忘记自己为了什么而出发&#xff0c;希望你可以不忘初心&#xff0c;不要随波逐流&#xff0c;一直走下去&#x1f3b6; &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; &#x1f984; …

牛客前端刷题(六)—— JS基础

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦! 赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏…

前端面试中经常提到的LRU缓存策略详解

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &am…

微信小程序解决view点击事件穿透地图map触发markertap

微信小程序中使用map组件&#xff0c;ios手机中点击地图上的view&#xff0c;会触发底下的markertap&#xff0c;只要底下如果有marker点的话。 这就造成了用户体验不是很好。 然后无意间我发现点击能滑动的scroll-view反而不会触发底下的markertap&#xff0c;就等于是一个不…

HTML介绍以及常用代码

HTML 网页基础 html(Hyper Text Markup Language)超文本标 记语言&#xff0c;发明者: Tim Berners-leehtml主要是定义网页内容和结构的。html是编 写网页的语言。html只能运行在浏览器上面网页的技术包含: html(编写网页结构&#xff0c;类似人 的骨架)&#xff0c;css(层叠…

前端启动项目npm run dev报错npm ERR! missing script: dev

今天遇到了这样一个nt问题 突然前端跑不起来后面发现是进行npm run dev 命令的时候少进入一层目录 进去之后就可以了对此遇到这个bug我还查了很多blog 发现还有以下两种原因1.打开的是当前文件夹&#xff0c;但是文件夹package.js里的scripts确实没有dev,输入vue init webpack …

【node进阶】深入浅出前后端身份验证(下)---JWT

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 &#x1f525; 系列专栏 &#xff1a; node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&a…

【JavaScript】JS实用案例分享:选择器组件 | 简易计算器

&#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&#xff09; &#x1f5a5;️ TypeScript知识总结&…

Axure RP9使用指南

1、快捷键 选中图层移动到上一层 ctrl [ 选中图层移动到下一层 ctrl ] 选中图层移动到顶层 ctrl shift [ 选中图层移动到底层 ctrl shift ] 合并为一组 ctrl G 取消合并 ctrl shift G 锁定位置和尺寸 ctrl K 解锁 ctrl shift K 拖动页面可以按住空格再通过鼠标拖动…

CSS实现文字颜色渐变

三行代码即可实现&#xff1a; background: linear-gradient(to bottom, #ffff, #f8fdff, #acf5ff, #67eeff, #24d8ff);-webkit-background-clip: text;color: transparent; 一 先设置背景颜色渐变 background 渐变属性可选值&#xff1a; 1 linear-gradient 为线性渐变…

JavaScript的节点操作 —— 增加节点

目录 JavaScript中的节点操作分为&#xff1a;增、删、改、查&#xff08;获取&#xff09;&#xff0c;四大类型。 我们直接利用案例来学习&#xff1a; HTML布局代码&#xff1a; JavaScript代码实现&#xff1a; 第一步&#xff1a;获取所有要用到的元素对象&#xff…

Vue3中toRef以及toRefs的基本使用

toRef以及toRefs 作用:创建一个ref对象&#xff0c;其value值指向另一个对象中的某个属性。 语法&#xff1a;const name toRef(obj,name) 应用&#xff1a;要将响应式对象中的某个属性单独提供给外部使用时 拓展:toRefs与toRef功能一致&#xff0c;但可以批量创建多个ref对…

vue报错 Error in render: “TypeError: Cannot read properties of undefined (reading ‘nickname‘)“

起因&#xff1a;我用axios请求数据&#xff08;可以看见数据了&#xff0c;已经请求成功的&#xff09;&#xff0c;最后加载在模板上&#xff08;页面模板上有内容&#xff09;&#xff0c;但是控制台出现了一个奇怪的错误 在created()钩子函数请求接口并报错数据&#xff0…

css 如何实现文本竖排、横排展示

writing-mode 该属性定义了文本在水平或垂直方向上如何排布 writing-mode:horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr接下来和我一起看看各个属性值的用法吧&#xff01;Go! <style>.root {border: 1px solid green;width: 400px;height: 4…

Vue内置组件的component标签

component标签&#xff1a;它的用途是可以动态绑定我们的组件,根据数据不同更换不同的组件. 有一个is属性&#xff0c;is的作用就是显示指定的组件 官方说明&#xff1a;渲染一个“元组件”为动态组件。依 is 的值&#xff0c;来决定哪个组件被渲染 使用方式也很简单&#xf…

nvue基础快速入门

一、uniapp连接手机 1、用USB让手机和电脑连接 2、点击3---8次手机版本信息打开开发者模式 3、在更多设置里面找到开发者选项 4、打开USB调试和允许手机可以USB安装&#xff0c;以及不要让手机只允许充电&#xff0c;要打开文件传输模式&#xff08;在手机消息栏里面会有提示…

前后端交互流程

1.前后端交互: 前后端交互&#xff0c;也可以理解为数据交互。前端需要获取&#xff08;GET&#xff09;的数据获取上传&#xff08;POST&#xff09;的数据&#xff0c;要通过 请求 来完成的&#xff0c;前端发送请求&#xff0c;后端接收到请求后&#xff0c;便进行对数据库…

若依移动端Ruoyi-App——引入uview2.0开发项目

1. 背景&#xff1a; 若依移动端Ruoyi-App只有个人中心&#xff0c;登录&#xff0c;其他模块都是建设中&#xff0c;因uniapp本身样式不够美观&#xff0c;所以本文基于ruoyi移动端引入uview2.0&#xff0c;实现基本功能。 RuoYi-App: &#x1f389; RuoYi APP 移动端框架&am…

element plus 的表单form使用详解

首先在你需要使用form组件的Vue文件里引入 import type { FormInstance } from element-plus 拿这一张图解释一下属性&#xff0c;第一项ref"ruleFormRef",&#xff0c;ruleFormRef就是我们定义并使用各个属性的必要条件&#xff0c;const ruleFormRef ref<Form…