我正在使用
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
被传递?
在回调中,首先使用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;
},
},