【java】微信小程序登录,后端流程

简介: 微信小程序登录

微信小程序登录

1、前端请求

前端调用wx.login()获取临时授权码(凭证)code,然后返回给后端。

2、后端接收、调用

后端接收到前端返回的临时授权码(凭证)code之后,携带code、appid、appsecret访问微信api,微信api返回唯一登录凭证openid等信息。


登录api网址:

获取openid:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html

image.png

获取接口调用凭据AccessToken:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html

获取手机号:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html

3、储存、封装

后端拿到微信api返回的openid等信息,再使用openapi调用获取微信手机号、头像等信息封装到一起,储存到数据库中,以便登录校验,信息更新。

image.png

4、响应

后端将可开放数据负载进token,返回给前端。


使用jwt进行封装

// 将用户id存入token,返回

Map<String, Object> claims = new HashMap<>();

claims.put(Constants.JWT_USERID, member.getId());

claims.put(Constants.JWT_USERNAME, member.getName());

String token = JwtUtil.createJWT(jwtProperties.getBSecretKey(), jwtProperties.getTtl(), claims);

5、再请求

前端token过期或者退出登录后再次请求登录时,重复获取openid步骤,然后将获取到的openid与数据库的openid进行对比,没有一致的openid视为新用户注册,有一致的id则进行信息更新操作,然后封装token返回。



public class JwtUtil {

   /**
    * 生成jwt
    * 使用Hs256算法, 私匙使用固定秘钥
    *
    * @param secretKey  jwt秘钥
    * @param dateOffset jwt过期时间(小时)
    * @param claims     设置的信息
    * @return token
    */
   public static String createJWT(String secretKey, int dateOffset, Map<String, Object> claims) {

       // 指定签名的时候使用的签名算法,也就是header那部分
       SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;


       // 设置jwt的body
       JwtBuilder builder = Jwts.builder()

               // 如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
               .setClaims(claims)

               // 设置签名使用的签名算法和签名使用的秘钥
               .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))

               // 设置过期时间
               .setExpiration(DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, dateOffset));


       return builder.compact();

   }


JwtUtils工具类(加密解密token)

   /**
    * Token解密
    *
    * @param secretKey jwt秘钥 此秘钥一定要保留好在服务端, 不能暴露出去, 否则sign就可以被伪造, 如果对接多个客户端建议改造成多个
    * @param token     加密后的token
    * @return claims
    */
   public static Claims parseJWT(String secretKey, String token) {

       try {

           // 得到DefaultJwtParser
           Claims claims = Jwts.parser()

                   // 设置签名的秘钥
                   .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))

                   // 设置需要解析的jwt
                   .parseClaimsJws(token).getBody();

           return claims;

       } catch (Exception e) {

           throw new RuntimeException("没有权限,请登录");

       }

   }


}

相关文章
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
479 5
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
853 70
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
796 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
25437 14
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
968 9
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
4129 12
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
9321 4
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
973 2
|
JavaScript Java Docker
干货含源码!如何用Java后端操作Docker(命令行篇)
只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~