Reactjs 如何使用刷新令牌配置clientMaxAge/keepAlive?(下一个作者)
使用NextAuth的凭据提供程序为我们的用户提供一个简单的电子邮件/pw登录流,我正在尝试找出处理刷新令牌的会话选项的最佳组合 目前,成功登录后,我们的API会发回JWT和一个30分钟的配置属性Reactjs 如何使用刷新令牌配置clientMaxAge/keepAlive?(下一个作者),reactjs,jwt,next.js,next-auth,Reactjs,Jwt,Next.js,Next Auth,使用NextAuth的凭据提供程序为我们的用户提供一个简单的电子邮件/pw登录流,我正在尝试找出处理刷新令牌的会话选项的最佳组合 目前,成功登录后,我们的API会发回JWT和一个30分钟的配置属性USER\u SESSION\u LENGTH 我已将clientMaxAge和keepAlive的提供程序选项组合设置为30分钟,并在JWT回调中,检查过期时间是否小于“almostNow”Date.now()调用,如果是,请重新调用新的JWT并重置过期时间 虽然这似乎有效,但我认为我没有正确使用cl
USER\u SESSION\u 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;
},
}
/\u app.tsx
常量会话选项={
clientMaxAge:60*30,//如果缓存超过30分钟,则重新获取会话
保持寿命:60*30
};
//[…nextuth].ts
常量回调:回调选项={
异步jwt(令牌:任意,用户:任意){
如果(用户){
token.accessToken=user.token;
token.expires=Date.now()+user.config.user_SESSION_LENGTH*1000;
}
if(令牌?.accessToken){
const tokenexpire=token.expires;
const almostNow=Date.now()+60*1000;//随机检查一分钟后的时间,这样它就不会第一次运行,而是在30分钟后重新蚀刻。
if(tokenexpirement!==未定义&&tokenexpirement