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


    配置问题

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

    流程思路

    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类,发送到小程序,完成微信登录!

  • 相关阅读:
    JS获取音频的总时长,解决audio.duration 为 NaN || Infinity 问题
    唐朝边戍 NFT 作品集 2.0 上线市场平台,体验中国古代文化的魅力
    Android 13.0 系统settings详情页卸载修改为停止,禁止卸载app功能实现
    《ARM》cortex-A7核UART实验小作业
    rsync常用命令
    java毕业设计高校学生宿舍管理mybatis+源码+调试部署+系统+数据库+lw
    Webpack和JShaman相比有什么不同?
    Salesforce的中国区业务可能出现新变化,传言可能正在关闭
    【Java集合框架】15 ——SortedSet 接口
    CentOS系统磁盘的分区格式化和挂载操作
  • 原文地址:https://blog.csdn.net/weixin_67573348/article/details/132795348