확인에 성공하면 NextJS는 로그인 페이지에서 대시보드 페이지로 리디렉션됩니다.
P粉021854777
2023-08-13 10:56:17
<p>이 예를 사용하면 누군가 인증되지 않은 경우 nextjs가 로그인 페이지와 같은 지정된 페이지로 리디렉션되도록 할 수 있습니다. 하지만 사용자가 인증되었고 페이지가 로그인 페이지와 같은 경우 대시보드나 다른 페이지로 리디렉션되도록 이를 어떻게 수정할 수 있습니까? 이를 달성할 수 있는 구성이 있습니까? <code>matcher</code>와 같은 기능은 비공개 URL을 훌륭하게 유지합니다. 하지만 사용자가 로그인한 동안 액세스하는 것을 원하지 않는 특정 공개 URL에 대해 이 문제를 어떻게 해결합니까? 이것이 가능한가? </p>
<pre class="brush:php;toolbar:false;">'next/server'에서 { NextRequest, NextResponse } 가져오기
비동기 함수 미들웨어 내보내기(req: NextRequest, res: NextResponse) {
const token = req.headers.get('token') // TODO: 요청 헤더에서 토큰을 가져옵니다.
const userIsAuthenticated = false // TODO: 사용자가 인증되었는지 확인하세요.
console.log('middleware.ts', 'token', token);
if (!userIsAuthenticated) {
const signinUrl = 새 URL('/login', req.url)
NextResponse.redirect(signinUrl) 반환
}
NextResponse.next()를 반환합니다.
}
// 여기서 이 미들웨어 기능이 실행되어야 하는 모든 경로를 지정할 수 있습니다.
// 단일 문자열 값 또는 일치자 배열을 지원합니다.
const 구성 내보내기 = {
일치자: ['/api/auth/:path*', '/'],
}</pre>
Next-Auth를 사용하여 인증한다고 가정합니다.
사용
withAuth
包装中间件,并使用Next-Auth提供的token变量验证会话,然后根据会话的有效性重定向到您希望的route
.도움이 될 수 있는 TS 코드는 다음과 같습니다.
으아악