Reactjs 如何使用刷新令牌配置clientMaxAge/keepAlive?(下一个作者)

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

使用NextAuth的凭据提供程序为我们的用户提供一个简单的电子邮件/pw登录流,我正在尝试找出处理刷新令牌的会话选项的最佳组合

目前,成功登录后,我们的API会发回JWT和一个30分钟的配置属性
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