微信小程序第五节——登录那些事儿(超详细的前后端完整流程)

📌 微信小程序第一节 ——自定义顶部、底部导航栏以及获取胶囊体位置信息。
📌 微信小程序第二节 —— 自定义组件
📌 微信小程序第三节 —— 页面跳转的那些事儿
📌 微信小程序第四节—— 网络请求那些事儿

  • 😜           是江迪呀
  • ✒️本文关键词微信小程序登陆token前端后端验证加密
  • ☀️每日   一言:趁青春尚存,别为生活沉沦。

前言

在微信小程序的开发过程中,如果想要保留用户数据(比如:操作记录购物车信息等等)就必须要用户登陆。为什么呢?比如说,数据库中有一条数据你如何知道这条数据属于谁?属于那个用户呢?这就需要用户登录来获取用户唯一标识从而确定这条数据是属于哪个用户的,那么如何做微信小程序的登陆功能呢?让我们使用Springboot框架+AOP一起来学习吧!


一、流程

微信小程序登录流程:

此图来自微信小程序开发文档

开发者服务器处理流程:

在这里插入图片描述

1.1 获取用户Code

通过wx.login来获取临时登录code

wx.login({
   
   
  success (res) {
   
   
    if (res.code) {
   
   
      //发起网络请求
      wx.request({
   
   
        url: 'https://example.com/onLogin',
        data: {
   
   
          code: res.code
        }
      })
    } else {
   
   
      console.log('登录失败!' + res.errMsg)
    }
  }
})

1.2 获取appid

在注册微信开发者账后,可以在微信小程序管理后台获取appid
在这里插入图片描述

1.3 获取appsecret

小程序密钥同样是在注册微信开发者平台账号后,在管理后台获取的:
在这里插入图片描述
由于微信小程序密钥不以明文的方式展示,如果忘记了,重置下就可以了。

1.4 开发者服务向微信接口服务发起请求

拿着微信codeappidappsecret开发者服务器去请求微信接口服务 换取 openIdsecretKey(这里我们使用ApiPost工具来进行请求,当然PostMan工具也行):
在这里插入图片描述

调用微信接口服务接口(注意是Get请求):

https://api.weixin.qq.com/sns/jscode2session?

1.5 返回值

{
   
   
	"session_key": "xxxxx",
	"openid": "xxxxx"
}

拿到返回值后,应该入库,保存一下。
数据库结构如下:
在这里插入图片描述
等下次该用户登录时,走完1.4流程后,可以根据返回值中的openid在我们库中找到该用户,然后进行后续的操作。

1.6 自定义token

所谓token就是用来确认用户的身份证,拿到下面的返回值后,我们有下面两种方式生成自定义token

(1)使用业务ID生成token(推荐使用,后续的内容都是以用户ID作为例子的):在这里插入图片描述

(2)使用session_key生成token

{
   
   
	"session_key": "xxxxx"
}

(3)生成token的工具:

使用md5加密工具来生成token,工具类如下:

import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;

import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

public class AESUtil {
   
   

    /**
     * 加密密钥
     */
    private static final String ENCODE_KEY = "test_key_secret_";
    /**
     * 偏移量
     */
    private static final String IV_KEY = "0000000000000000";

    public static String encryptFromString(String data, Mode mode, Padding padding) {
   
   
        AES aes;
        if (Mode.CBC == mode) {
   
   
            aes = new AES(mode, padding,
                    new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"),
                    new IvParameterSpec(IV_KEY.getBytes()));
        } else {
   
   
            aes = new AES(mode, padding,
                    new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"));
        }
        return aes.encryptBase64(data, StandardCharsets.UTF_8);
    }

    public static String decryptFromString(String data, Mode mode, Padding padding) {
   
   
        AES aes;
        if (Mode.CBC == mode) {
   
   
            aes = new AES(mode, padding,
                    new SecretKeySpec(ENCODE_KEY.getBytes(), "AES"),
                    new IvParameterSpec(IV_KEY.getBytes()));
        } else {
   
   
            aes = new AES(mode,</
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是江迪呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值