在nextauth中如何访问session.user.id?

wfypjpf4  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(152)

我使用的是next-auth版本4.19.2。
我有一个简单的组件,它只显示用户的登录身份:

import { useSession, signIn, signOut } from "next-auth/react"

export default function LoginPlaceholder() {
  const { data: session } = useSession();

  if(session) {
    return <>
    
      Signed in as 
        userID: {session.user.id} <br/>
        name:  {session.user.name} <br/>
        email:  {session.user.email} <br/>
        
      <button onClick={() => signOut()}>Sign out</button>
    </>
  }
  return <>
    Not signed in <br/>
    <button onClick={() => signIn()}>Sign in</button>
  </>
}

我的[... nextauth.js]只返回一些虚拟数据:

async authorize(credentials) {

        console.log("authorize script running...");

        const user = { id: 22, name: 'J Smith', email: 'jsmith@example.com' }
        return user;
      }

出于某种原因,我的输出只显示了姓名和电子邮件,而没有ID。
登录用户ID:
姓名:J史密斯
电子邮件:www.example.comjsmith@example.com
我在一个项目中工作,组织中的多个人可以共享同一个电子邮件地址(不是我的主意),所以电子邮件对我来说不是唯一标识符。我需要ID或用户名作为唯一标识符,但我不确定如何获得它。
我也尝试过传递其他数据,但我唯一能得到显示的是姓名和电子邮件。

const user = { id: 22, userName: 'jSmith' name: 'J Smith', email: 'jsmith@example.com' }

但是同样,除了名称和电子邮件,我的组件没有获得任何其他值。
我的问题是:如何修改代码以显示用户名?

8hhllhi2

8hhllhi21#

您应该使用回调,大致如下:

callbacks: {
        async jwt({token, user}) {
      
           if (user?.id) {
               token.id = user.id
           }
           if (user?.userName) {
               token.userName = user.userName;
           }
           return token
        },
        async session({session, token}) {
            session.id = token.id;
            session.userName = token.userName;
            return session;
        }
      }

相关问题