代码之家  ›  专栏  ›  技术社区  ›  YellowBlue

如何防止Next.js页面在使用Next-auth登录GitHub后重新加载?

  •  0
  • YellowBlue  · 技术社区  · 2 年前

    使用Next。JS的Typescript和下一个auth,一旦登录,页面就会被重新加载。

    这是页面的代码:

    import Link from 'next/link';
    
    import { signIn, signOut } from 'next-auth/react';
    
    const MyPage = () => {
      return (
        <nav>
          <ul>
            <li>
              <Link
                href="/api/auth/signin"
                onClick={(e) => {
                  e.preventDefault();
                  signIn('github', { redirect: false });
                }}
              >
                Sign In
              </Link>
            </li>
            <li>
              <Link
                href="/api/auth/signout"
                onClick={(e) => {
                  e.preventDefault();
                  signOut({ redirect: false });
                }}
              >
                Sign Out
              </Link>
            </li>
          </ul>
        </nav>
      );
    };
    
    export default Navbar;
    

    的代码 auth API是这样的:

    import NextAuth from 'next-auth/next';
    import GitHubProvider from 'next-auth/providers/github';
    
    export default NextAuth({
      providers: [
        GitHubProvider({
          clientId: process.env.MY_ID!,
          clientSecret: process.env.MY_SECRET!,
        }),
      ],
    });
    
    

    如何避免重新加载页面?

    我试过了 signIn('credentials',{redirect: false}) ,但问题依然存在。

    我希望登录后页面不会重新加载。谢谢。

    0 回复  |  直到 2 年前
        1
  •  2
  •   Abi B    2 年前

    我对Next、Next Auth和Formik也有类似的问题,经过多次修改,以下代码现在对我有效:

     const handleSubmit = async (values: { email: any; password: any; }, { setSubmitting }: any) => {
          signIn('credentials', {
            email: values.email,
            password: values.password,
            redirect: false,
          }).then((res) => {
            if (res?.error) {
              console.log(res.error);
            } else {
              setSubmitting(false);
              router.push('/');
            }
          });
        };