我尝试使用新的Next.js 12中间件功能实现路由保护。但我发现每次我尝试访问会话时都得到null。因此没有得到预期的结果。为什么?
import { NextResponse, NextRequest } from 'next/server'
import { getSession } from "next-auth/react"
//This acts like a middleware, will run every time for pages under /dashboard, also runs for the nested pages
const redirectUnauthenticatedUserMiddleware = async (req, ev) => {
const session = await getSession({ req })
if (!session) {
return NextResponse.redirect('/login')
}
return NextResponse.next()
}
export default redirectUnauthenticatedUserMiddleware
字符串
2条答案
按热度按时间gtlvzcf81#
还有其他方法可以访问您的
session
。这里我们使用
getToken
fromnext-auth/jwt
.来说明:secret
作为NextAuth
function
中的option
(相关参考在此)。如果不是,它将不起作用。无论您使用session
还是jwt
option
。都将起作用。字符串
下面是一个例子
_middleware.js
:型
如果你已经找到了如何使用
getSession
的解决方案。你可以上传你的答案并与我们分享。谢谢。ljsrvy3e2#
上面的答案是正确的,对于那些想知道的人来说是有效的。useSession和getSession只在客户端工作,但nextjs中的中间件应用程序在服务器端,所以使用这两个不会工作或可能抛出错误。考虑使用getToken。你传递给getToken的secret也是你自己创建的secret,通常在env中命名为NEXTAUTH_SECRET