如果我尝试给予用户一个access_token,它不会工作。我在session回调函数中得到的所有结果是:姓名、电子邮件、图像。但我需要其他信息,包括access_token
export const authOptions: NextAuthOptions = {
adapter: MongoDBAdapter(clientPromise),
providers:[
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID!!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!!,
})
],
callbacks: {
async jwt({ token, account, user }) {
if(account)
{
token.accessToken = account?.access_token
}
return token
},
async session({ session, token, user }) {
//Gives me undefined
console.log(token)
if (token) {
//No access_token from jwt
session.user = token
}
console.log(session)
return session
},
}
}
在客户端输出会话时的结果:
{
user: {
name: 'Max Mustermann',
email: 'm.mustermann@test.com',
image: 'https://lh3.googleusercontent.com/a/cweawwqad...=s96-c'
},
expires: '2023-06-11T14:23:17.361Z'
}
2条答案
按热度按时间mkh04yzy1#
下一步Auth实际上分配了一个访问令牌,但出于安全原因,它没有将其与会话回调一起返回,但您可以保护路由而无需尝试,它将工作
如何在客户端中保护或获取会话:
如何在API路由中保护或获取会话:
}
如何在getServerSideProps中保护或获取会话:
现在,如果你想在会话回调中添加一些东西,你可以在[...nextauth].js文件中这样做:
pdsfdshx2#
这是我的答案,来自nextauth doc:
使用数据库会话时,User(用户)对象作为参数传递。
当使用JSON Web令牌进行会话时,将提供JWT有效负载(令牌)。
由于我使用MongoDB作为适配器,所以我没有返回access_token