位置: IT常识 - 正文

结合若依框架实现微信小程序授权登录(若依框架是谁写的)

编辑:rootadmin
结合若依框架实现微信小程序授权登录 文章目录1 前言1.1 环境准备1.2 登录流程2.小程序代码2.1 新增按钮微信授权登录2.2 创建wx.Login和wxHandleLogin方法3.后端代码3.1 yml配置文件中新增微信小程序id和秘钥3.2 在数据库中新增open_id和union_id字段3.3 在SysUser中新增两个字段3.4 SysUserMapper新增selectWxUserByOpenId3.5 SysLoginController新增接口wxLogin3.6 SysLoginService新增wxLogin方法1 前言

推荐整理分享结合若依框架实现微信小程序授权登录(若依框架是谁写的),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:若依框架使用教程,若依框架主要有哪些功能特性,若依框架使用教程,若依框架用到的技术,若依框架搭建,若依框架优势,若依框架搭建,若依框架主要有哪些功能特性,内容如对您有帮助,希望把文章链接给更多的朋友!

结合若依框架实现微信小程序授权登录(若依框架是谁写的)

通过若依框架实现微信小程序的授权登录。

原视频链接:

https://www.bilibili.com/video/BV1iM411E7RE/?spm_id_from=333.337.search-card.all.click&vd_source=c15794e732e28886fefab201ec9c6253

1.1 环境准备下载ruoyi-vue代码 https://gitee.com/y_project/RuoYi-Vue下载ruoyi-app代码 https://gitee.com/y_project/RuoYi-App1.2 登录流程

流程图如下:

2.小程序代码app模块配置微信登录 2.1 新增按钮微信授权登录在登录按钮下,新增微信授权登录按钮<button @click="wxHandleLogin" class="login-btn cu-btn block bg-green lg round">微信授权登录</button>2.2 创建wx.Login和wxHandleLogin方法调用uni.getProvider获取服务商信息调用uni.login获取code,并保存调用uni.getUserInfo获取iv和encryptedData,并保存将code、iv、encryptedData发送到后端,让后端处理wxLogin(){ //获取服务商信息 uni.getProvider({ service: "Oauth", success: (res) => { console.log(res); if(~res.provider.indexOf("WeiXin")){ //登录 uni.login({ provider: "WeiXin", success: (loginRes) => { console.log("登录",loginRes); this.wxLoginForm.code = loginRes.code; } }) } } }) },3.后端代码3.1 yml配置文件中新增微信小程序id和秘钥新增配置类WxAppConfigpublic class WxAppConfig { /** AppId */ private String appfId; /** AppSecret */ private String appfSecret; public String getAdppId() { return appId; } public void setAppdId(String appId) { this.appId = appId; } public String getAppSecret() { return appSecret; } public void setAppSecret(String appSecret) { this.appSecret = appSecret; }}3.2 在数据库中新增open_id和union_id字段

3.3 在SysUser中新增两个字段/** unionId */ private String unionId; /** openId */ private String openId;public String getUnionId() { return unionId; } public void setUnionId(String unionId) { this.unionId = unionId; } public String getOpenId() { return openId; } public void setOpenId(String openId) { this.openId = openId; }3.4 SysUserMapper新增selectWxUserByOpenId /** * 根据openId查询用户信息 * @param openId * @return */ public SysUser selectWxUserByOpenId(String openId);3.5 SysLoginController新增接口wxLogin/** * 登录验证 * * @author ruoyi */@RestControllerpublic class SysLoginController{@PostMapping("/wxLogin") public AjaxResult wxLogin(@RequestBody WxLoginBody wxLoginBody) { logger.info("登录参数:" + JSON.toJSONString(wxLoginBody)); String code = wxLoginBody.getCode(); //秘钥 String encryptedIv = wxLoginBody.getEncryptedIv(); //加密数据 String encryptedData = wxLoginBody.getEncryptedData(); //想微信服务器发送请求获取用户信息 String url = "https://api.weixin.qq.com/snns/jscode2session?appid=" + wxAppConfig.getAppId() + "&secret=" + wxAppConfig.getAppSecret() + "&js_code=" + code + "&grant_type=authorizatinon_code"; String res = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSONObject.parseObject(res); //获取session_key和openid String sessionKey = jsonObject.getString("session_key"); String openid = jsonObject.getString("openid"); //解密 String decryptResult = ""; try { //如果没有绑定微信开放平台,解析结果是没有unionid的。 decryptResult = decrypt(sessionKey,encryptedIv,encryptedData); } catch (Exception e) { e.printStackTrace(); return AjaxResult.error("微信登录失败!"); } if (StringUtils.hasText(decryptResult)){ //如果解析成功,获取token String token = loginService.wxLogin(decryptResult); AjaxResult ajax = AjaxResult.success(); ajax.put(Constants.TOKEN, token); return ajax; }else{ return AjaxResult.error("微信登录失败!"); } } }}3.6 SysLoginService新增wxLogin方法/** * 微信登录 * * @param decryptResult 登录凭证 只能用一次 * @return */ public String wxLogin(String decryptResult){ //字符串转json JSONObject jsonObject = JSONObject.parseObject(decryptResult);// String unionid = jsonObject.getString("unionid"); String openId = jsonObject.getString("openId"); //获取nickName String nickName = jsonObject.getString("nickName"); //获取头像 String avatarUrl = jsonObject.getString("avatarUrl"); //还可以获取其他信息 //根据openid判断数据库中是否有该用户 //根据openid查询用户信息 SysUser wxUser = userMapper.selectWxUserByOpenId(openId); //如果查不到,则新增,查到了,则更新 SysUser user = new SysUser(); if (wxUser == null) { // 新增 user.setUserName(IdUtils.fastSimpleUUID()); user.setNickName(nickName); user.setAvatar(avatarUrl); wxUser.setUnionId(unionid); user.setOpenId(openId); user.setCreateTime(DateUtils.getNowDate()); //新增 用户 userMapper.insertUser(user); }else { //更新 user = wxUser; user.setNickName(nickName); user.setAvatar(avatarUrl); user.setUpdateTime(DateUtils.getNowDate()); userMapper.updateUser(user); } //组装token信息 LoginUser loginUser = new LoginUser(); loginUser.setOpenId(openId); //如果有的话设置 loginUser.setUser(user); loginUser.setUserId(user.getUserId()); // 生成token return tokenService.createToken(loginUser); }
本文链接地址:https://www.jiuchutong.com/zhishi/278104.html 转载请保留说明!

上一篇:IE浏览器如何取消阻止弹出窗口(IE浏览器如何取消全屏)

下一篇:wifi密码忘记了解决方法(wifi密码忘记了怎么重新设置密码)

  • mate30如何取消充电自动开机(华为mate30怎么关闭智能充电)

  • 华为nova4能装联通的卡吗(华为nova4可以直接连接usb吗)

  • 苹果8p如何设置门卡(苹果8p如何设置灵动岛)

  • 为什么电脑图标变白色(为什么电脑图标变白色文件图)

  • 手机能给电脑装系统吗(手机能给电脑装系统软件)

  • 微信一进入就卡死怎么办(打开微信老是卡)

  • 搜索发现如何删除(删除搜索发现里面的内容)

  • 钉钉的投屏码到底是什么(钉钉投屏的投屏码在哪显示)

  • was aloo什么型号(was-al10什么型号)

  • 苹果换摄像头有影响吗(苹果换摄像头有什么要注意的)

  • vivox23防不防水(vivox23防水吗)

  • vivo系统修复模式怎么开机(vivo 系统修复)

  • 抖音怎么开启下载功能(抖音怎么开启下载水印)

  • 华为手机莫名死机自动重启(华为手机莫名死机自动重启,重启后下载了很多软件)

  • 摇手机能增加步数吗(用手摇手机可以增加步数吗)

  • 被别人拉黑了发信息别人能收到吗(被别人拉黑了发朋友圈他那还显示吗)

  • qq注销账号有什么后果(qq注销账号有什么要求)

  • 华为nova4是oled屏幕吗(华为nove4e是oled还是lcd)

  • 在windows系统中哪些用户可以查看日志(在windows中叙述正确的是)

  • ap log设置什么意思(aplogosize)

  • ipad下载腾讯视频为什么是小的(ipad下载腾讯视频hd版和不是HD)

  • 手机自拍杆怎么用步骤说详细点(手机自拍杆怎么用步骤)

  • 导航一体机通电不开机(导航一体机电源电路图)

  • 分享帝国CMS首页调用最新会员、活跃会员与积分排行的方法(分享帝国cms首页在哪)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络