使用GoolgeProvider的NextAuth在会话回调中不返回用户

sr4lhrrt  于 2023-05-17  发布在  Go
关注(0)|答案(1)|浏览(175)

突然我无法再访问注册用户的电子邮件地址。我使用NextAuth和Google作为提供商。到目前为止,一切都很顺利。实际上,注册成功后,用户的电子邮件应该由Google发送。在MongoDB数据库中,像往常一样创建用户表,并将用户与电子邮件一起保存在那里。所以这肯定和NextAuth有关因为在会话回调函数中,我在session.user得到undefined

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 = await SignToken(user.email as string)
        token.id = user.id
      }
      return token
    }, 
    async session({ session, token, user }) {

      session.user = token
     //session.user is undefined
      console.log(session.user)
        return session
      },    
  },
}

客户端页面:

const { data: session, status } = useSession()

   if (session) {
    console.log({ session });
   }

输出无电子邮件等

zynd9foi

zynd9foi1#

您在authOptions中缺少此内容

session: {
    strategy: "jwt",
  },

如果你把它悬停起来,你会看到这个
选择保存用户会话的方式。默认值是“jwt”,会话cookie中的加密JWT(JWE)。
但是,如果您使用适配器,我们将其默认为“数据库”。您仍然可以通过显式定义“jwt”来强制JWT会话。

相关问题