我找不到任何关于JWT令牌生命周期的信息,在Strapi CMS上多长时间有效?我如何能自动刷新令牌时,它将是无效的?我怎么做令牌验证,在我得到关于令牌生命周期结束的exeption之前?端点链接的名称是什么?
nwnhqdif1#
我很有信心,默认的持续时间是30天,它不能使用刷新令牌重新发行。我认为这是一个开放的问题。您可以在这里查看更多信息:https://github.com/strapi/strapi/issues/1676#issuecomment-409575253它在未来更新的路线图上:https://portal.productboard.com/strapi/1-public-roadmap/c/34-refresh-token-jwt
nlejzf6q2#
这里可以看到默认值https://github.com/strapi/strapi/blob/86e0cf0f55d58e714a67cf4daee2e59e39974dd9/packages/strapi-admin/services/token.js是的,30天
oogrdqng3#
这里有一个目前的解决方案,刷新令牌需要认证。我目前的解决方案是在旧令牌到期后使用Axios Interceptor创建一个新令牌。
后台
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}) } }
{ "method": "POST", "path": "/refreshToken", "handler": "auth.refreshToken", "prefix": "", "config": { "policies": [] } },
前端
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);
ogq8wdun4#
为此,你只需要去文件\node_modules@strapi\plugin-users-permissions\server\config.js找到行:jwt:{ expiresIn:'30 d',},并根据需要设置任意数量...例如(两小时):jwt:{ expiresIn:'2 h',},然后重新启动strapi服务器
4条答案
按热度按时间nwnhqdif1#
我很有信心,默认的持续时间是30天,它不能使用刷新令牌重新发行。
我认为这是一个开放的问题。您可以在这里查看更多信息:
https://github.com/strapi/strapi/issues/1676#issuecomment-409575253
它在未来更新的路线图上:
https://portal.productboard.com/strapi/1-public-roadmap/c/34-refresh-token-jwt
nlejzf6q2#
这里可以看到默认值https://github.com/strapi/strapi/blob/86e0cf0f55d58e714a67cf4daee2e59e39974dd9/packages/strapi-admin/services/token.js
是的,30天
oogrdqng3#
这里有一个目前的解决方案,刷新令牌需要认证。我目前的解决方案是在旧令牌到期后使用Axios Interceptor创建一个新令牌。
后台
前端
ogq8wdun4#
为此,你只需要去文件\node_modules@strapi\plugin-users-permissions\server\config.js找到行:jwt:{ expiresIn:'30 d',},并根据需要设置任意数量...例如(两小时):jwt:{ expiresIn:'2 h',},然后重新启动strapi服务器