Hello :)

Alors voila j'ai un soucis avec NextJS (version App Router)

J'ai un AuthContextqui créée un state user quand le user est connecté à Firebase

J'ai une page protégée qui vérifie que le user soit bien connecté avec const user = useContext(AuthProvider)

Bon jusque la ça va, le soucis c'est que le context met un peu de temps à charger, et cette lenteur c'est devenu un vrai problème depuis que j'ai essayé de protéger ma route

En gros quand je fais

if (!user) router.redirect("/signin")

La page me redirige même si je suis connecté, tout ça parce que le programme n'attends pas la réponse

Du coup pour ma question: Vous avez une solution pour avoir une route protégée qui fonctionne? J'ai essayé de passer la page en SSR mais les use ne fonctionnent pas dans des pages server, il faut des pages clients :/

Voila merci :)

3 réponses


Grafikart
Réponse acceptée

Fait en sorte que ton contexte ne rende les "children" que lorsqu'il a finit de résoudre l'état d'authentification de l'utilsateur.

popotte
Auteur

Hello :)

Merci, alors c'est ce que j'avais fait initialement, et ensuite je voulais protéger mes routes

J'ai fais en partie cette solution

Dans mon AuthContext.js j''ai ajouté une valeur par défaut dans mon state

Si quelqu'un à le même soucis:

//AuthContext.js

const [ user, set_user ] = useState({ auth: null, state: "pending" })
onAuthStatechanged(user => set_user({ auth: user, state: "ready" }))

// page.js

if (user.state === "ready") {
    if (!user.auth) return redirect...

    return (<div>OK</div>)
}

return (<div>Loading...</div>)

Eeet niveau perfs j'ai trouvé ça lent du coup j'ai tout migré sur AstroJS, un peu plus chiant à dev mais les perfs sont dingues ^^

Ca m'interesse aussi