关于Jwt的刷新问题想要请教老师
来源:11-13 鉴权守卫:设置鉴权用户可访问的控制器(作业)

LinkeZ
2023-11-14
您好Brian老师,关于Jwt如果设置的有效时间比较短,刷新Jwt的业务逻辑您建议写在Nest生命周期中的哪里比较好呢?还是在每次请求API时将新的Jwt添加在Service的返回数据中呢?
写回答
1回答
-
Nest生命周期中的哪里比较好呢?——直接在auth模块中,加入一个refresh的post接口啊?由前端自行来处理。
前端,比如vue中可以加在axios的拦截器里面来处理401的错误,如果是401,则把旧的token,使用新的axios实例来请求refresh接口。逻辑大概如下:
import axios from 'axios'; // 创建一个 Axios 实例 const api = axios.create({ baseURL: '你的API基础URL', // 其他配置... }); // 添加响应拦截器 api.interceptors.response.use(response => { return response; }, async error => { const originalRequest = error.config; // 检查错误类型是否为 401 if (error.response.status === 401 && !originalRequest._retry) { originalRequest._retry = true; const refreshApi = axios.create(); // 创建新的 axios 实例进行刷新操作 try { // 假设你的刷新 token 接口如下 const { data } = await refreshApi.post('/refresh_token', { // 你的刷新 token 逻辑 }); // 存储新的 token localStorage.setItem('token', data.token); // 更新原请求的 headers originalRequest.headers['Authorization'] = 'Bearer ' + data.token; // 用新的 token 重试原始请求 return api(originalRequest); } catch (refreshError) { // 处理刷新 token 失败的逻辑 return Promise.reject(refreshError); } } return Promise.reject(error); }); export default api;
012023-11-15
相似问题