如何在 Next-auth 中获取当前会话提供者

M. *_*Dev 4 authentication reactjs next.js next-auth

在 Next-auth 中,我们可以获取会话相关信息,例如用户:{name,email .. etc}

如下:

import { useSession } from "next-auth/client"

export default function Component() {
  const [session, loading] = useSession()

  if (session) {
    return <p>Signed in as {session.user.email}</p>
  }

  return <a href="/api/auth/signin">Sign in</a>
}
Run Code Online (Sandbox Code Playgroud)

我还想获取要使用的组件中的当前提供程序名称。供您参考,next-auth 支持许多提供商登录,例如 Facebook、Twitter .. 等

例如,如果用户通过 Twitter Api 登录,我想获取这条信息并将其打印在他的个人资料页面中。

来源: https: //next-auth.js.org/v3/getting-started/client#usesession

Ish*_*ssi 5

Callbacks可用于将附加数据传递给session对象。

Provider用户首次登录时会提供详细信息。

您可以使用jwt回调将数据存储在jwtcookie 中。

在 [...nextauth].js 中:

const callbacks = {}

callbacks.jwt = async function jwt(token, user , account) {
    
    if (user) {
        token = { id: user.id  , provider:account.provider , ...moreData}
    }

    return token
}

const options = {
    providers,
    callbacks
}

Run Code Online (Sandbox Code Playgroud)

注意:您还需要使用session回调将token数据传递给useSession挂钩。

callbacks.session = async function session(session, token) {
    session.user = {
        provider : token.provider,
        id: dbUser.id,
        profile: dbUser.profile,
        
    }

    return session
}

export default (req, res) => NextAuth(req, res, options)
Run Code Online (Sandbox Code Playgroud)

这样提供者将被存储在令牌中以供后续请求。

在此处了解有关回调的更多信息:回调