如何解决如何使用刷新令牌配置 clientMaxAge/keepAlive? 下一个身份验证
使用 next-auth 的凭据提供程序为我们的用户提供简单的电子邮件/密码登录流程,我正在尝试找出会话选项的最佳组合来处理刷新令牌。
目前,成功登录后,我们的 API 会发回 JWT 和 30 分钟的配置属性 USER_SESSION_LENGTH
。
我已将 clientMaxAge
和 keepAlive
的提供程序选项组合设置为 30 分钟,并在 JWT 回调中检查到期时间是否小于“almostNow” ' Date.now()
调用,如果是,则重新获取新的 JWT 并重置到期时间。
虽然这似乎有效,但我认为我没有正确使用 clientMaxAge/keepAlive
。我应该如何正确设置/配置这些值以协同工作?
// _app.tsx
const sessionOptions = {
clientMaxAge: 60 * 30,// Re-fetch session if cache is older than 30 minutes
keepAlive: 60 * 30
};
<Provider options={sessionOptions} session={pageProps.session}>
<Component {...pageProps} />
</Provider>
// [...nextauth].ts
const callbacks: CallbacksOptions = {
async jwt(token: any,user: any) {
if (user) {
token.accessToken = user.token;
token.expires = Date.now() + user.config.USER_SESSION_LENGTH * 1000;
}
if (token?.accessToken) {
const tokenExpiry = token.expires;
const almostNow = Date.now() + 60 * 1000; // random check of a minute past now so it won't run the first time,but on the refetch after 30 minutes.
if (tokenExpiry !== undefined && tokenExpiry < almostNow) {
try {
const newToken = await api.renewToken(token.accessToken); // hit our backend for new token
token.accessToken = newToken.token;
token.expires = Date.now() + user.config.USER_SESSION_LENGTH * 1000;
} catch (error) {
console.error(error,'Error refreshing access token');
}
}
}
return token;
},}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。