NextAuth.js (v5) - 有没有办法在每次回调调用时获取 jwt?

问题描述 投票:0回答:1

我正在使用

Auth.js
(v5) 在
Next.js
Web 应用程序中实现身份验证和授权

我需要在需要访问令牌的端点中与身份提供者的 API 进行交互,因此我按以下方式编写了回调

export const {
    handlers,
    auth,
    signIn,
    signOut
} = NextAuth({
    providers: [Spotify],
    debug: true,
    secret: process.env.AUTH_SECRET,
    session: {
        strategy: "jwt"
    },
    callbacks: {
        session: async ({ session, token }) => {
            if (session?.user && token.sub) {
                session.user.id = token.sub;
            }
            return {...session, access_token: token.accessToken};
        },
        jwt: async ({ user, token, account }) => {
            if (user) {
                token.uid = user.id;
            }
            if(account) {
                token.access_token = account.access_token
            }
            return token;
        },
    }
})

问题在于,

account
回调中的
jwt
并不是仅在登录时才出现
undefined
。我是否需要将访问令牌保存在cookie中,或者有没有办法确保
account
被传递?

next.js cookies access-token next-auth
1个回答
0
投票

在回调中,首先使用jwt方法,然后使用session,

回调:{ 异步 jwt({ 令牌、用户、帐户 }) { 控制台.log(

JWT token: ${JSON.stringify(token)}
); 控制台.log(
JWT Account: ${JSON.stringify(account)}
);

        if (account && user) {
            return {
                accessToken: account?.access_token,
                accessTokenExpires: Date.now() + account?.expires_in 1000,
                refreshToken: account?.refresh_token,
                user,
            };
        }
    },

    async session({ session, token }) {

      session.user = token?.user;
      session.accessToken = token?.access_token;
      session.error = token?.error

      console.log(`Returning Session ${JSON.stringify(session)}`)
      return session;
    },
},
© www.soinside.com 2019 - 2024. All rights reserved.