为什么在 NextAuth 会话回调中用户对象未定义?
2022-05-01
15452
我使用 NextAuth 与 discord 提供商进行登录,我需要将用户 ID 添加到会话对象中。为此,我使用会话回调,但用户对象未定义。当我尝试将用户 ID 添加到会话对象时,我收到如下错误:
[next-auth][error][JWT_SESSION_ERROR] https://next-auth.js.org/errors#jwt_session_error Cannot read properties of undefined (reading 'id')
确实,似乎用户对象未定义,但我没有任何解决方案。
export default NextAuth({
providers: [
DiscordProvider({
clientId: process.env.DISCORD_CLIENT_ID,
clientSecret: process.env.DISCORD_CLIENT_SECRET,
authorization: { params: { scope: 'identify' } }
})
],
session: {
jwt: true
},
jwt: {
secret: process.env.JWT_SECRET
},
callbacks: {
async session({session, user}) {
session.user.id = user.id
return session
},
async jwt(token) {
return token
}
}
})
3个回答
你可以这样做
providers: [
Github({
clientId: process.env.GITHUB_ID,
clientSecret:process.env.GITHUB_SECRET,
})
],
database :process.env.DB_URL,
session:{
jwt:true
},
adapter: MongoDBAdapter(clientPromise, {
databaseName: 'AuthDb'
}),
jwt:{
secret: 'secretCode',
},
callbacks:{
async jwt({token,user}){
if(user){
token.id = user.id
}
return token
},
async session(session,token) {
session.user.id =token.id
return session
}
},
}); ```
Murad Zeynallı
2022-10-31
您可以通过
@types/next-auth
添加以下内容的
auth.d.ts
文件来增强 next-auth 会话类型:
import "next-auth";
declare module "next-auth" {
interface User {
id: string | number;
}
interface Session {
user: User;
}
}
stonkz
2022-12-02
假设这是您的代码
callbacks: {
async jwt({ token, user }) {
token.user = user
return token
},
因此,令牌和用户第一次都有数据,我们假设令牌和用户将在结构中
token = {
id: "123",
emeail: "[email protected]"
}
user = {
name: "name"
age: 34
}
出于某种原因,next-auth 会一次又一次地触发此回调,但如果您修改代码,例如
if(user) {
token.user = user
}
然后,如果您控制台您的令牌和用户,您可以看到,在用户未定义的情况下,令牌将具有用户对象,例如
token = {
id: "123",
email: "[email protected]"
user: {
name: "name"
age: 34
}
}
user = undefined
因此,如果您使用 if 条件将用户分配给令牌,只要用户在 next-auth 中未定义,令牌中就会有用户对象,反之亦然。所以它要么是
token = {
id: "123",
email: "[email protected]"
user: {
name: "name"
age: 34
}
}
user = undefined
或
token = {
id: "123",
email: "[email protected]"
}
user = {
name: "name"
age: 34
}
}
Pran R.V
2023-11-24