若依前后端分离项目无感知刷新token整合

思路:

1、 首先就是我们登录成功的时候要返回两个token标识给前端,accessToken(权限认证token)和refreshToken(无感刷新token)

 // 生成accessToken
        String accessToken = tokenService.createToken(loginUser);
        // 生成refreshToken
        String refreshToken = tokenService.createRefreshToken(loginUser.getUsername());

2、前端将token保存起来

    
          commit('SET_TOKEN', tokens[0])
          commit('SET_REFRESH_TOKEN', tokens[1])

3、当accessToken过期的时候,会响应401,在前端响应拦截器中拦截到响应结果,然后带着refreshToken去发起请求,根据refreshToken生成新的accessToken返回给前端,再重新执行原请求

axios.get(process.env.VUE_APP_API_BASE_URL+process.env.VUE_APP_BASE_API+"/refreshToken", {
          headers:{
          refreshToken: getRefreshToken()
        }
        }).then(response => {
            console.log(response)
          if (response.data && response.data.code === 200){
            //重新设置token
            setToken(response.data.token);
            isRelogin.show = false;
            //刷新页面
            location.reload();
          }else{
            MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
              isRelogin.show = false;
              store.dispatch('LogOut').then(() => {
                location.href = '/index';
              })
            }).catch(() => {
              isRelogin.show = false;
            });
          }
          })
public AjaxResult refreshToken(HttpServletRequest request)
    {
        AjaxResult ajax = AjaxResult.success();
        // 重新生成令牌
        //从token中获取登录用户,再生成新的token存到redis,并且把token返回到前端
        String refreshToken = request.getHeader("refreshToken");
        String accessToken = tokenService.toRefreshAcesToken(refreshToken);
        if (StringUtils.isNull(accessToken)){
            return AjaxResult.error();
        }
        ajax.put(Constants.TOKEN, accessToken);
        return ajax;
    }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现前后端分离项目中的微信小程序登录接口,你需要完成以下步骤: 1. 在微信公众平台上,注册并创建一个小程序,并获得小程序的 AppID 和 AppSecret。 2. 在前端代码中编写小程序登录逻辑,获取用户的登录凭证 code,然后将 code 传递到后端。 3. 在后端代码中,使用传递过来的 code 调用微信提供的 API,获取用户的 OpenID 和 Session Key。 4. 后端将用户的 OpenID 和 Session Key 存储到数据库中,并生成一个 Token 返回给前端。 5. 前端将 Token 存储到本地缓存中,以便后续的请求中携带 Token。 6. 后续的请求中,前端需要在请求头中携带 Token,后端根据 Token 鉴权,判断用户是否登录。 以下是一个示例的后端代码(使用 Flask 框架实现): ```python from flask import Flask, request, jsonify import requests import json app = Flask(__name__) @app.route('/login', methods=['POST']) def login(): code = request.json['code'] appid = 'your_appid' secret = 'your_secret' url = f'https://api.weixin.qq.com/sns/jscode2session?appid={appid}&secret={secret}&js_code={code}&grant_type=authorization_code' resp = requests.get(url) data = json.loads(resp.text) openid = data.get('openid') session_key = data.get('session_key') # 将 openid 和 session_key 存储到数据库中 # ... token = generate_token(openid) return jsonify({'token': token}) @app.route('/protected', methods=['GET']) def protected(): token = request.headers.get('Authorization') if verify_token(token): # 鉴权通过,执行业务逻辑 # ... return jsonify({'message': 'success'}) else: return jsonify({'message': 'unauthorized'}), 401 def generate_token(openid): # 生成 Token # ... return token def verify_token(token): # 验证 Token # ... return True ``` 在上述代码中,`/login` 接口用于处理小程序登录请求,`/protected` 接口用于处理需要鉴权的请求。你需要根据自己的业务逻辑进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诸葛博仌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值