javascript - 如果未找到 session ,则重定向到登录页面

标签 javascript next.js next-auth

我有一个使用 next-auth 的小型应用程序,它显示登录/注销按钮,具体取决于用户是否登录。这些按钮按预期工作,并在单击时将我重定向到登录页面。

但是如果未登录,如何自动重定向到登录页面?

我尝试在 if(session)... 下添加 signIn() 但这给了我错误:

ReferenceError: window is not defined

还有 router.push('/api/auth/signin) 但这给了我错误:

Error: No router instance found. you should only use "next/router" inside the client side of your app. https://nextjs.org/docs/messages/no-router-instance

import React from "react";
import { useSession, signIn, signOut } from "next-auth/client";
import { useRouter } from 'next/router'
export default function Home() {

  const [session, loading] = useSession();
  const router = useRouter()

  if (session) {
    console.log("session = true")
    router.push('/blogs')
    return (
      <>
        Signed in as {session.user.name} <br />
        <button onClick={() => signOut()}>Sign out</button>
      </>
    );
  }
  console.log("session = false")
 
  return (
    <>
      Not signed in <br />
      <button onClick={() => signIn()}>Sign in</button>
    </> 
  );
}

最佳答案

您需要将代码放入 useEffect 中,这样它仅在组件安装时在客户端上执行。另外,您需要等到 loading 变量变为 false 才应该检查 session 变量。

useEffect(()=>{
  if(!loading){
    if (session) {
      console.log("session = true")
      router.push('/blogs')
    }else{
      // maybe go to login page
      router.push('/login')
  }
 }
},[router,session])

此外,请查看 How to protect routes in Next.js next-auth?获取包含登录注销页面的完整解决方案。

关于javascript - 如果未找到 session ,则重定向到登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68611945/

相关文章:

javascript - PHP 通过 Ajax 为来自 Javascript "JSON.stringify"的对象保存在 MySQL 中?

javascript - 简单的 NPM 包捆绑/销售?

javascript - 使用 Refs 从 React.js 中的表单获取文本输入

reactjs - 为什么我收到 ReferenceError : self is not defined when I import a client-side library?

cookies - 使用 NextAuth 跨多个域 (CORS) 进行身份验证

javascript - angular js中textArea的2路绑定(bind)

javascript - 在循环中使用逻辑运算符会导致矛盾

next.js - NextJS 13 Beta 应用程序目录 API 与 Prisma

next.js - next-auth linkedin 身份验证给出错误 : OPError: expected 200 OK, 得到:403 Forbidden

javascript - 使用 Next-auth 时从 API 返回错误信息