为什么 NextAuth 会话回调中未定义用户对象?

The*_*heo 8 javascript jwt reactjs next.js next-auth

我使用 NextAuth 与不和谐提供程序进行登录,并且需要将 userID 添加到会话对象中。为此,我使用会话回调,但用户对象未定义。当我尝试将 userID 添加到会话对象时,出现如下错误:

[next-auth][错误][JWT_SESSION_ERROR] https://next-auth.js.org/errors#jwt_session_error 无法读取未定义的属性(读取“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
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

Mur*_*llı 4

你可以这样做

    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 
        }
    },
}); ```
Run Code Online (Sandbox Code Playgroud)