Si la vérification réussit, NextJS redirige de la page de connexion vers la page du tableau de bord
P粉021854777
2023-08-13 10:56:17
<p>Avec cet exemple, je peux demander à nextjs de rediriger vers une page spécifiée, telle que la page de connexion, si quelqu'un n'est pas authentifié. Cependant, comment puis-je modifier cela pour que si l'utilisateur est authentifié et que la page ressemble à une page de connexion, le rediriger vers le tableau de bord ou une autre page ? Existe-t-il une configuration permettant d'y parvenir ? Quelque chose comme <code>matcher</code> conservera correctement les URL privées. Mais comment puis-je résoudre ce problème pour une URL publique spécifique à laquelle je ne souhaite pas que les utilisateurs accèdent lorsqu'ils sont connectés ? Ce scénario est-il possible ? </p>
<pre class="brush:php;toolbar:false;">importer { NextRequest, NextResponse } depuis 'next/server'
exporter le middleware de fonction asynchrone (req : NextRequest, res : NextResponse) {
const token = req.headers.get('token') // TODO : Récupérer le jeton de l'en-tête de la requête
const userIsAuthenticated = false // TODO : Vérifier si l'utilisateur est authentifié
console.log('middleware.ts', 'jeton', jeton);
si (!userIsAuthenticated) {
const signinUrl = nouvelle URL ('/login', req.url)
retourner NextResponse.redirect (signinUrl)
}
retourner NextResponse.next()
}
// Ici, vous pouvez spécifier tous les chemins où cette fonction middleware doit s'exécuter
// Prend en charge une valeur de chaîne unique ou un tableau de correspondants
exporter la configuration const = {
matcher : ['/api/auth/:path*', '/'],
}</pré>
En supposant que vous utilisez Next-Auth pour vous authentifier :
Utilisez
withAuth
包装中间件,并使用Next-Auth提供的token变量验证会话,然后根据会话的有效性重定向到您希望的route
.Voici un code TS qui peut vous aider :