2

ユーザーの簡単な電子メール/パスワード ログイン フローに next-auth の資格情報プロバイダーを使用し、更新トークンを処理するためのセッション オプションの最適な組み合わせを見つけようとしています。

現在、ログインに成功すると、API は JWT とUSER_SESSION_LENGTH30 分の構成プロパティを返します。

と の 30 分に設定されたプロバイダー オプションの組み合わせがありclientMaxAgekeepAliveJWT コールバックで、有効期限が「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;
    },
}
4

1 に答える 1