Strapi JWT 令牌寿命?
Strapi JWT token lifetime?
我找不到任何关于 JWT 令牌生命周期的信息,它在 Strapi CMS 上的有效期是多长时间?
令牌无效时如何自动刷新令牌?
在获得关于令牌生命周期结束的例外之前,我如何进行令牌验证?端点名称是什么 link?
我非常有信心默认持续时间是 30 天,并且不能使用刷新令牌重新发布。
我认为这是一个悬而未决的问题。您可以在此处查看更多信息:
https://github.com/strapi/strapi/issues/1676#issuecomment-409575253
它在未来更新的路线图上:
https://portal.productboard.com/strapi/1-public-roadmap/c/34-refresh-token-jwt
暂时解决,刷新token需要鉴权。
我现在的解决方案是在旧的到期后使用 Axios Interceptor.
创建一个新的
后端
我已经覆盖了验证方法,所以我可以发送 ignoreExpiration 作为选项,否则 verfiy 会在令牌过期时抛出错误
const verify = (token) => {
return new Promise(function(resolve, reject) {
jwt.verify(
token,
_.get(strapi.plugins, ['users-permissions', 'config', 'jwtSecret']),
{ignoreExpiration: true},
function(err, tokenPayload = {}) {
if (err) {
return reject(new Error('Invalid token.'));
}
resolve(tokenPayload);
}
);
});
}
module.exports = {
refreshToken: async (ctx) => {
const {token} = ctx.request.body;
const payload = await verify(token);
console.log(payload)
return strapi.plugins['users-permissions'].services.jwt.issue({id: payload.id})
}
}
routes.json
{
"method": "POST",
"path": "/refreshToken",
"handler": "auth.refreshToken",
"prefix": "",
"config": {
"policies": []
}
},
前端
我已经使用 axios-auth-refresh 创建了一个拦截器,只要它检测到 401 错误就会触发刷新令牌请求
import createAuthRefreshInterceptor from 'axios-auth-refresh';
import axios, { AxiosInstance } from "axios";
const refreshAuthLogic = (failedRequest:any) => axios.post(`${SERVER_URL}${REFRESH_TOKEN_URL}`, {token: failedRequest.response.config.headers['Authorization'].split(" ")[1]}).then(tokenRefreshResponse => {
localStorage.setItem('token', tokenRefreshResponse.data);
failedRequest.response.config.headers['Authorization'] = 'Bearer ' + tokenRefreshResponse.data;
return Promise.resolve();
});
createAuthRefreshInterceptor(axiosInstance, refreshAuthLogic);
是的,那是 30 天
我找不到任何关于 JWT 令牌生命周期的信息,它在 Strapi CMS 上的有效期是多长时间?
令牌无效时如何自动刷新令牌?
在获得关于令牌生命周期结束的例外之前,我如何进行令牌验证?端点名称是什么 link?
我非常有信心默认持续时间是 30 天,并且不能使用刷新令牌重新发布。
我认为这是一个悬而未决的问题。您可以在此处查看更多信息:
https://github.com/strapi/strapi/issues/1676#issuecomment-409575253
它在未来更新的路线图上:
https://portal.productboard.com/strapi/1-public-roadmap/c/34-refresh-token-jwt
暂时解决,刷新token需要鉴权。 我现在的解决方案是在旧的到期后使用 Axios Interceptor.
创建一个新的后端
我已经覆盖了验证方法,所以我可以发送 ignoreExpiration 作为选项,否则 verfiy 会在令牌过期时抛出错误
const verify = (token) => {
return new Promise(function(resolve, reject) {
jwt.verify(
token,
_.get(strapi.plugins, ['users-permissions', 'config', 'jwtSecret']),
{ignoreExpiration: true},
function(err, tokenPayload = {}) {
if (err) {
return reject(new Error('Invalid token.'));
}
resolve(tokenPayload);
}
);
});
}
module.exports = {
refreshToken: async (ctx) => {
const {token} = ctx.request.body;
const payload = await verify(token);
console.log(payload)
return strapi.plugins['users-permissions'].services.jwt.issue({id: payload.id})
}
}
routes.json
{
"method": "POST",
"path": "/refreshToken",
"handler": "auth.refreshToken",
"prefix": "",
"config": {
"policies": []
}
},
前端
我已经使用 axios-auth-refresh 创建了一个拦截器,只要它检测到 401 错误就会触发刷新令牌请求
import createAuthRefreshInterceptor from 'axios-auth-refresh';
import axios, { AxiosInstance } from "axios";
const refreshAuthLogic = (failedRequest:any) => axios.post(`${SERVER_URL}${REFRESH_TOKEN_URL}`, {token: failedRequest.response.config.headers['Authorization'].split(" ")[1]}).then(tokenRefreshResponse => {
localStorage.setItem('token', tokenRefreshResponse.data);
failedRequest.response.config.headers['Authorization'] = 'Bearer ' + tokenRefreshResponse.data;
return Promise.resolve();
});
createAuthRefreshInterceptor(axiosInstance, refreshAuthLogic);
是的,那是 30 天