当前位置: 首页 > news >正文

uniapp微信登录的流程

使用流程:

1.调用wx.login()获取一个临时的登录凭证code(只能使用一次)

2.调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台账号下的唯一标识


业务需求:

1.基于微信小程序的登录功能实现

2.如果用户是新用户则需要自动完成创建


一个基本的用户表

源码示例


  @Autowiredprivate UserService userService;@AutowiredJwtProperties jwtProperties;/*** 微信登录* @param userLoginDTO* @return*/@ApiOperation("微信登录")@PostMapping("/login")public Result<UserLoginVO> login(@RequestBody UserLoginDTO userLoginDTO) {log.info("微信用户登录:{}",userLoginDTO );//微信登录User user = userService.wxLogin(userLoginDTO);//生成jwt令牌HashMap<String, Object> claims = new HashMap<>();//存放用户idclaims.put("userId", user.getId());//生成令牌 参数1 密钥,参数2 有效期,参数3 存放在令牌中的自定义数据String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), claims);//传递后前端所需的数据UserLoginVO userLoginVO = UserLoginVO.builder().id(user.getId()).openid(user.getOpenid()).token(token).build();return Result.success(userLoginVO);}
    @AutowiredWeChatProperties weChatProperties;@AutowiredUserMapper userMapper;//定义获取微信openid的urlprivate static final String WX_LOGIN_URL = "https://api.weixin.qq.com/sns/jscode2session";/**** 微信登录* @param userLoginDTO* @return*/@Overridepublic User wxLogin(UserLoginDTO userLoginDTO) {String openid = getOpenid(userLoginDTO);//判断当前传递的code是否正确if (openid == null) {throw new LoginFailedException(MessageConstant.LOGIN_FAILED);}log.info("微信登录openid:{}", openid);//通过openid查询对象,判断是否为新用户User user = userMapper.getByOpenid(openid);if (user != null) {return user;}//封装当前的用户对象user = User.builder().openid(openid).createTime(LocalDateTime.now()).build();userMapper.insert(user);return user;}private String getOpenid(UserLoginDTO userLoginDTO) {//获取当前的openidHashMap hashMap = new HashMap();hashMap.put("appid", weChatProperties.getAppid());hashMap.put("secret", weChatProperties.getSecret());hashMap.put("js_code", userLoginDTO.getCode());hashMap.put("grant_type", "authorization_code");String json = HttpClientUtil.doGet(WX_LOGIN_URL, hashMap);JSONObject jsonObject = JSON.parseObject(json);String openid = jsonObject.getString("openid");return openid;}


http://www.mrgr.cn/news/76393.html

相关文章:

  • 【数据结构】什么是链栈?
  • TI毫米波雷达(五)—— chirp
  • JMeter中添加请求头
  • 告别Print,使用IceCream进行高效的Python调试
  • vue项目PC端和移动端实现在线预览docx、excel、pdf文件
  • MySQL高级(三):事务隔离
  • 数据结构(基本概念及顺序表)
  • [JAVA]有关MyBatis环境配置介绍
  • docker busybox作为initContainers
  • 系统架构设计师:软件架构的演化和维护
  • 解决laravel框架生成的pdf过大的问题
  • Linux应用层学习——Day2(文件IO)
  • centos7安装Chrome使用selenium-wire
  • STM32单片机CAN总线汽车线路通断检测
  • uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑
  • 【linux】进程等待与进程替换
  • Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用
  • vue3:computed
  • 我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算
  • web安全漏洞之ssrf入门
  • 优化C++设计模式:用模板代替虚函数与多态机制
  • 二分搜索的三种方法
  • 正则表达式(补充)
  • vue3: ref, reactive, readonly, shallowReactive
  • uniapp: 微信小程序包体积超过2M的优化方法
  • Vue和Vue-Element-Admin(十三):基于vue2比较学习vue3