NextAuth 选择不同的 google 帐户进行登录

5 authentication google-oauth reactjs next.js next-auth

将 NextAuth 与 google 提供商一起使用,我如何才能完全退出会话并确保再次登录时,我会进入帐户选择页面而不是立即登录?

这是我的简单 NextJs 登录/注销组件:


import type { NextPage, NextPageContext } from "next";
import { getSession, signIn, signOut, useSession } from "next-auth/react";

const Home: NextPage = () => {
    const { data, status } = useSession();

    return (
        <>
            {data?.user ? (
                <button onClick={() => signOut()}>Sign out</button>
            ) : (
                <button onClick={() => signIn("google")}>Sign In</button>
            )}
            {data?.user?.name}
        </>
    );
};

export async function getServerSideProps(context: NextPageContext) {
    const session = await getSession(context);
    return {
        props: { session }
    };
}

export default Home;


Run Code Online (Sandbox Code Playgroud)

当前行为:初次登录后,应用程序会路由到谷歌帐户选择页面,我输入凭据并登录。然后我退出。再次登录后,应用程序会自动使用之前选择的帐户登录。

预期行为:每次登录尝试时显示谷歌帐户选择页面。

小智 12

因此,下一个身份验证文档中提到了解决方案,原因如下: https: //next-auth.js.org/providers/google

要每次都显示帐户选择屏幕,请将authorization块添加到您的选项中,如下所示:

  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
      authorization: {
        params: {
          prompt: "consent",
          access_type: "offline",
          response_type: "code"
        }
      }
    }),
  ],
Run Code Online (Sandbox Code Playgroud)