Rumah > Soal Jawab > teks badan
P粉4289867442023-08-26 13:25:30
Kod ini nampaknya menimbulkan masalah/keadaan perlumbaan kerana anda mencampurkan dua cara berbeza untuk mengendalikan Janji tak segerak:
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;
hendaklah ditukar kepada ini:
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; } }
Atau ini:
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
Tambahkan ini component
pada fail App.js anda:
function Auth({ children }) { const router = useRouter(); const { status } = useSession({ required: true, onUnauthenticated() { router.push("/sign-in"); }, }); if (status === "loading") { returnLoading ...; } return children; }
Kini dalam fungsi App anda, bukannya mengembalikan <Komponen {...pageProps} />
, anda mula-mula menyemak sama ada <Component {...pageProps} />
,而是首先检查component
是否具有auth
属性,所以您将其包装在<Auth>
中,以确保每个需要会话的组件只有在会话加载完成后才会挂载(这就是为什么用户为null
mempunyai atribut auth
, jadi anda membungkusnya dengan <Auth>
untuk memastikan bahawa setiap komponen yang memerlukan sesi hanya akan dipasang selepas sesi selesai dimuatkan (itulah sebabnya pengguna null
code>, sebab sesi masih loading)
{ Component.auth ? () : ( ); }
Akhirnya anda menambah .auth = {}
pada setiap halaman yang anda mahu menentukan sesi (dalam kes anda Laman Utama)
const Home = () => { //.... } Home.auth = {};
Ini juga membantu mengubah hala pengguna ke /sign-in
halaman