Wenn die Überprüfung erfolgreich ist, leitet NextJS von der Anmeldeseite zur Dashboard-Seite weiter
P粉021854777
2023-08-13 10:56:17
<p>Mit diesem Beispiel kann ich nextjs auf eine bestimmte Seite umleiten lassen, beispielsweise auf die Anmeldeseite, wenn jemand nicht authentifiziert ist. Wie kann ich dies jedoch ändern, damit der Benutzer, wenn er authentifiziert ist und die Seite so etwas wie eine Anmeldeseite ist, zum Dashboard oder einer anderen Seite weitergeleitet wird? Gibt es eine Konfiguration, die dies erreichen kann? Etwas wie <code>matcher</code> verwaltet private URLs gut. Aber wie behebe ich das für eine bestimmte öffentliche URL, auf die Benutzer nicht zugreifen sollen, während sie angemeldet sind? Ist dieses Szenario möglich? </p>
<pre class="brush:php;toolbar:false;">import { NextRequest, NextResponse } from 'next/server'
Asynchrone Funktions-Middleware exportieren (req: NextRequest, res: NextResponse) {
const token = req.headers.get('token') // TODO: Holen Sie sich das Token aus dem Anforderungsheader
const userIsAuthenticated = false // TODO: Überprüfen Sie, ob der Benutzer authentifiziert ist
console.log('middleware.ts', 'token', token);
if (!userIsAuthenticated) {
const signinUrl = neue URL('/login', req.url)
return NextResponse.redirect(signinUrl)
}
return NextResponse.next()
}
// Hier können Sie alle Pfade angeben, in denen diese Middleware-Funktion ausgeführt werden soll
// Unterstützt einen einzelnen String-Wert oder ein Array von Matchern
export const config = {
Matcher: ['/api/auth/:path*', '/'],
}</pre>
假设您正在使用Next-Auth进行身份验证:
使用
withAuth
包装中间件,并使用Next-Auth提供的token变量验证会话,然后根据会话的有效性重定向到您希望的route
。这是一个可能有帮助的TS代码: