javascript - 如果未找到会话,则重定向到登录页面
问题描述
我有一个使用 next-auth 的小型应用程序,它显示一个登录/注销按钮,具体取决于用户是否登录。这些按钮按预期工作,并在单击时将我重定向到登录页面。
但是,如果未登录,如何自动重定向到登录页面?
我尝试在下添加signIn()
,if(session)...
但这给了我错误:
ReferenceError:未定义窗口
还有router.push('/api/auth/signin
),但这给了我错误:
错误:未找到路由器实例。您应该只在应用程序的客户端内使用“next/router”。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])
另外,看看如何保护 Next.js 中的路由 next-auth?一个完整的解决方案login
和logout
页面。
推荐阅读
- c++ - GitHub 操作中 boost::read_graphviz 的问题
- firebase - Firebase 仪表板中缺少登录状态和活跃用户显着增加
- bash - 循环检查用户定义的数字的倍数是否在用户定义的范围内
- python - Django admin 不会加载某些静态文件
- python - I am trying to scrape a website for my project but I am stuck with an error. Take a look and let me know if anyone have suggestion for this
- javascript - 如何安全地实施我的登录路线?
- mapbox - Postgis -> Geoserver -> GeoJson -> Mapbox gl js
- c# - WPF按键绑定到字典中的项目
- python - Python 包 RSeQC 中的无效语法错误
- google-search-console - 谷歌搜索控制台发现 url 对于站点地图索引来说太少了