Maison > Questions et réponses > le corps du texte
P粉4289867442023-08-26 13:25:30
Ce code semble créer un problème/une condition de concurrence car vous mélangez deux manières différentes de gérer la promesse asynchrone :
const user = await axios({ url: `${url}/api/user/login`, method: "POST", data: { username: username, password: password, }, "content-type": "application/json", }) .then((res) => { return res.data; }) .catch((err) => { if (err.response.data) { throw new Error(err.response.data); } else { return null; } return null; }); return user;
devrait être remplacé par ceci :
try { const user = await axios({ url: `${url}/api/user/login`, method: "POST", data: { username: username, password: password, }, "content-type": "application/json", }); return user.data; } catch (err) { if (err.response.data) { throw new Error(err.response.data); } else { return null; } }
ou ceci :
axios({ url: `${url}/api/user/login`, method: "POST", data: { username: username, password: password, }, "content-type": "application/json", }).then((res) => { return res.data; }).catch((err) => { if (err.response.data) { throw new Error(err.response.data); } else { return null; } return null; });
P粉7072355682023-08-26 10:01:08
Ajoutez ceci component
à votre fichier App.js :
function Auth({ children }) { const router = useRouter(); const { status } = useSession({ required: true, onUnauthenticated() { router.push("/sign-in"); }, }); if (status === "loading") { returnLoading ...; } return children; }
Maintenant, dans votre fonction App, au lieu de renvoyer <Component {...pageProps} />
, vous vérifiez d'abord si <Component {...pageProps} />
,而是首先检查component
是否具有auth
属性,所以您将其包装在<Auth>
中,以确保每个需要会话的组件只有在会话加载完成后才会挂载(这就是为什么用户为null
a l'attribut auth
, donc vous l'enveloppez dans <Auth>
pour garantir que chaque composant qui nécessite une session ne sera monté qu'une fois le chargement de la session terminé (c'est pourquoi l'utilisateur est null
code>, car la session est toujours en cours de chargement)
{ Component.auth ? () : ( ); }
Enfin vous ajoutez .auth = {}
à chaque page où vous souhaitez définir une session (dans votre cas Accueil)
const Home = () => { //.... } Home.auth = {};
Cela permet également de rediriger l'utilisateur vers la /sign-in
page