当前位置:网站首页>微信小程序获取用户手机号码
微信小程序获取用户手机号码
2022-08-03 11:05:00 【詹Sir(开源字节)】
我们在做小程序开发的过程中,经常会涉及到用户认证的问题,最普遍的就是获取用户的手机号码一键登录
获取用户手机号码 分为以下几步:
1、第一点击页面获取授权code
2、第二获取小程序token
3、第三根据token与code获取手机号码
4、执行登录认证逻辑

接下来我们来实现以上四步
首先先看前端页面获取code与手机号码:
<button open-type="getPhoneNumber" @getphonenumber="weChatLogin" class="clearBtn">
<view class="loginType">
<view class="item">
<view class="icon"><u-icon size="60" name="weixin-fill" color="rgb(83,194,64)"></u-icon></view>
微信
</view>
</view>
</button>
weChatLogin(e){
uni.showLoading({title:"登录中....",mask:true})
let code= e.detail.code;
let url = "/api/miniWxApi/getPhoneNum?code="+code;
this.$u.get(url).then(res => {
let phoneNum = res.phoneNum
let weChatUrl = "/api/weChatLogin";
this.$u.post(weChatUrl,{
username: phoneNum,
code: code
}).then(data => {
uni.hideLoading();
// 登录成功初始化token与用户信息
this.$u.vuex('vuex_token', data.token);
this.$u.vuex('vuex_user', data.loginUser);
uni.switchTab({
url: '/pages/index/index'
})
});
});
},
接下来我们看后端获取token与认证逻辑:
/**
* 获取用户手机号码
*/
@GetMapping("/getPhoneNum")
public AjaxResult getPhoneNum(String code){
AjaxResult ajax = AjaxResult.success();
// Object token = getAccessToken();
Object token = WxUtil.obtainAccessToken(APPID, SECRET);
String phoneNum = WxUtil.getPhoneNum(token,code);
ajax.put("phoneNum",phoneNum);
return ajax;
}
/**
* 获取AccessToken
*/
@GetMapping("/getAccessToken")
public AjaxResult getAccessToken(){
AjaxResult ajax = AjaxResult.success();
Object token = redisCache.getCacheObject(accessTokenKey);
if(StringUtils.isNull(token)){
token = WxUtil.obtainAccessToken(APPID, SECRET);
redisCache.setCacheObject(accessTokenKey,token,30,TimeUnit.MINUTES);
}
ajax.put(accessTokenKey,token);
return ajax;
}
/**
* 微信小程序注册/登录
*/
@PostMapping("/weChatLogin")
public AjaxResult weChatLogin(HttpServletRequest request,@RequestBody LoginBody loginBody)
{
AjaxResult ajax = AjaxResult.success();
String msg = "登录成功";
if (StringUtils.isEmpty(loginBody.getUsername())){
msg = "用户名不能为空";
return error(msg);
}
// 判断是否为新用户
SysUser sysUser = userService.selectUserByUserName(loginBody.getUsername());
// 不是新用户,创建用户
if(sysUser == null){
sysUser = new SysUser();
sysUser.setUserName(loginBody.getUsername());
sysUser.setNickName(loginBody.getUsername());
sysUser.setPassword(loginBody.getUsername());
sysUser.setPhonenumber(loginBody.getUsername());
sysUser.setPassword(SecurityUtils.encryptPassword(loginBody.getUsername()));
sysUser.setDeptId(110L);
Long[] postIds = new Long[1];
postIds[0] = 8L;
Long[] roleIds = new Long[1];
roleIds[0] = 5L;
sysUser.setPostIds(postIds);
sysUser.setRoleIds(roleIds);
// 保存完用户后,还需要设置用户的角色,部门与岗位
userService.insertUser(sysUser);
}
// 生成token
LoginUser loginUser = new LoginUser(sysUser,null);
String token = tokenService.createToken(loginUser);
ajax.put(Constants.TOKEN, token);
ajax.put("loginUser", loginUser);
return ajax;
}
如上步骤即可实现uniapp微信小程序登录,开源字节坚持写优雅的代码,以上代码可在开源字节低代码平台中免费获取
如若转载,请注明出处:开源字节 https://sourcebyte.cn/article/209.html
边栏推荐
- 一文带你弄懂 CDN 技术的原理
- VRRP协议的作用及VRRP+OSPF配置方法
- build --repot
- [Explanation of JDBC and inner classes]
- 【LeetCode—第2题 两数之和 代码详解 】附有源码,可直接复制
- Machine Learning (Chapter 1) - Feature Engineering
- [Detailed explanation of binary search plus recursive writing method] with all the code
- MySQL - 2059 - Authentication plugin ‘caching_sha2_password‘ cannot be loaded
- 怎么在外头使用容器里php命令
- LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二
猜你喜欢

再谈“雷克萨斯”安全装置失效!安全手册疑点重重,网友:细思极恐

【LeetCode—第2题 两数之和 代码详解 】附有源码,可直接复制

怎么在外头使用容器里php命令

How to retrieve IDC research reports?

实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣

鸿蒙第三次

MySQL database combat (1)

成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...

Binary search tree (search binary tree) simulation implementation (there is a recursive version)

LyScript 实现对内存堆栈扫描
随机推荐
通过组策略安装软件和删除用户配置文件
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
微信多开批处理(自动获取安装路径)
RecyclerView的item高度自适应
如何通过DBeaver 连接 TDengine?
Matplotlib
C - 为什么指针常常初始化为 NULL?
科普大佬说 | 黑客帝国与6G有什么关系?
3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
Dry goods!A highly structured and sparse linear transformation called Deformable Butterfly (DeBut)
基于PHP7.2+MySQL5.7的回收租凭系统
白帽黑客与留守儿童破壁对“画”!ISC、中国光华科技基金会、光明网携手启动数字安全元宇宙公益展
苏州大学:从PostgreSQL到TDengine
MATLAB Programming and Applications 2.6 Strings
MATLAB程序设计与应用 2.7 结构数据与单元数据
QT with OpenGL(Shadow Mapping)(面光源篇)
build --repot
SmobilerService 推送实现
Machine Learning (Chapter 1) - Feature Engineering
试题G:单词分析 ← 第十一届蓝桥杯大赛第二场省赛赛题