当我在生产模式下构建应用程序时出现问题,它在开发模式下运行良好。 但是,当我在本地和 Vercel 上以生产模式运行时,刷新页面时会话令牌会丢失。但是,当我更改浏览器选项卡或打开另一个视图并返回时,页面会重新呈现,并且会话令牌已设置。
async jwt({ token, user, account, profile, isNewUser }) {
console.log("jwtCallback_Token", token);
console.log("jwtCallback_User", user);
console.log("jwtCallback_Account", account);
if (account && account.provider !== "cognito_google") {
token = { ...user }
}
else if (account?.provider === "cognito_google") {
token = {
id_token: account.id_token,
access_token: account.access_token,
refresh_token: account.refresh_token,
cust_exp: user?.exp,
picture: user?.picture,
email_verified: user?.email_verified,
email: user?.email,
sub: user?.sub,
name: user?.name
}
}
return token
},
async session({ session, token, user }) {
console.log("session-s", session);
console.log("session-t", token);
console.log("session-u", user);
session.access_token = token.access_token
return session
},
我正在使用客户端组件
const { data: session, status } = useSession()
并检索令牌
session?.access_token
我想在刷新后立即检索令牌,而不必先更改选项卡
我设法修复了它,尽管不是使用 useEffect 和 useSession hooks 中的 update() 的最佳方法
您在使用 getServerSession 时没有错过参数吗?
您想参考一下吗? https://next-auth.js.org/configuration/nextjs#getserversession