• 微信小程序登录问题(思路简略笔记)


    配置问题

    这是小程序登录问题,必要的两个配置。

    流程思路

    1.  微信小程序端,会返回一个code。

     2. 查看需要返回给微信小程序端的数据。

    3. 既然需要返回三个数据,先看openid如何拿到

    WX-Login   = https://api.weixin.qq.com/sns/jscode2session

     原来如此,可以看到,它根据AppId 和 密钥 ,前端发送的唯一标识,和固定的type类型,分装成map之后,发送了一个请求,解析出来json拿到了openid!。

    4. token令牌

    1. @PostMapping("/login")
    2. @ApiOperation("微信登录")
    3. public Result login(@RequestBody UserLoginDTO userLoginDTO) {
    4. log.info("微信用户登录", userLoginDTO.getCode());
    5. System.out.println("登录凭证....................................."+userLoginDTO.getCode());
    6. // 微信登录
    7. User user = userService.wxLogin(userLoginDTO);
    8. // 为微信用户生成JWT令牌
    9. HashMap clamis = new HashMap<>();
    10. clamis.put(JwtClaimsConstant.USER_ID, user.getId());
    11. String token = JwtUtil.createJWT(jwtProperties.getUserSecretKey(), jwtProperties.getUserTtl(), clamis);
    12. UserLoginVO userLoginVO = UserLoginVO.builder()
    13. .id(user.getId())
    14. .openid(user.getOpenid())
    15. .token(token)
    16. .build();
    17. System.out.println("返回参数............................."+userLoginVO.toString());
    18. return Result.success(userLoginVO);
    19. }
    1. public User wxLogin(UserLoginDTO userLoginDTO) {
    2. // 调用微信接口服务,获得当前微信用户的openid
    3. String openid = getOpenid(userLoginDTO.getCode());
    4. System.out.println("查看返回的微信用户id"+openid);
    5. //判断openid是否为空,如果为空表示登录失败,抛出业务异常
    6. if (openid == null) {
    7. throw new LoginFailedException(MessageConstant.LOGIN_FAILED);
    8. }
    9. // 判断当前用户是否为新用户
    10. User user = userMapper.getByOpenid(openid);
    11. System.out.println("新用户前..........................."+user.toString());
    12. // 如果是新用户,自动完成注册
    13. if (user == null) {
    14. user = User.builder()
    15. .openid(openid)
    16. .createTime(LocalDateTime.now())
    17. .build();
    18. userMapper.insert(user);
    19. }
    20. System.out.println("新用户:......................"+user.toString());
    21. // 返回这个用户对象
    22. return user;
    23. }

    user类:根据前端code拿到用户(如果没有先注册!)

    openid :那么首先wxLogin()方法,里面封装的数据里面有openid的值。

    token 令牌规则:  appid, 密钥 ,用户id  加密而成

    id: user类中获得!

    最后要返回的数据封装成userLoginVO类,发送到小程序,完成微信登录!

  • 相关阅读:
    【一】Mac 本地部署大模型
    YAMLException : java.nio.charset.MalformedInputException : Input length = 1
    SpringBoot里全局 非expcetion异常处理 非WebFlex
    Golang 中 Error 的设计及最佳实践
    【ELFK】之消息队列kafka
    计算机毕业设计Java校园新闻网站(系统+源码+mysql数据库+lw文档)
    @MapperScan的作用
    基于JSP的图书销售管理系统
    浅析Java设计模式【3.6】——模板方法
    杰理-AC69-v225&v233版本低延时差异
  • 原文地址:https://blog.csdn.net/weixin_67573348/article/details/132795348