Sekatan navigasi untuk menghalang penyemak imbas daripada tergantung pada konsol saya
P粉226413256
2023-08-16 08:43:57
<p>Laluan Peribadi telah dibuat untuk halaman papan pemuka, yang tidak boleh diakses melalui URL apabila tidak dilog masuk, tetapi menyegarkan halaman papan pemuka menghasilkan ubah hala ke halaman pengesahan. Jadi saya menambah sessionStorage, tetapi sekarang apabila menyegarkan ia berkata "mendikitkan navigasi untuk mengelakkan penyemak imbas daripada tergantung" pada konsol saya kerana ia terus mengubah hala ke halaman.</p>
<p>//以下是代码</p>
<p>//App.js</p>
<pre class="brush:php;toolbar:false;">import { BrowserRouter as Router, Routes, Route } daripada "react-router-dom";
import Papan Pemuka daripada "./components/dashboard";
import Auth daripada "./components/auth";
import PrivateRoute daripada "./PrivateRoute";
function App() {
kembali (
<Penghala>
<Laluan>
<Route path="/signin" element={<Auth />} />
<Laluan
path="/papan pemuka"
elemen={<Laluan Persendirian> <Papan Pemuka /></PrivateRoute>}
/>
</Laluan>
</Penghala>
);
}
eksport Apl lalai;</pre>
<p>//PrivateRoute.js</p>
<pre class="brush:php;toolbar:false;">import { Navigasi } daripada "react-router-dom";
import { auth } daripada "./config/firebase";
fungsi PrivateRoute({kanak-kanak}) {
pengguna const = auth.currentUser;
// 检查用户是否已经通过身份验证
jika (!pengguna) {
// 用户未通过身份验证,重定向到登录页面
kembali <Navigasi ke="/log masuk" ganti/>;
}
// 用户已通过身份验证,渲染受保护的路由
pulangkan kanak-kanak;
}
eksport PrivateRoute lalai;</pre>
<p>//Auth.js</p>
<pre class="brush:php;toolbar:false;">import { useEffect, useState } daripada "react";
import { useNavigate } daripada "react-router-dom";
import { auth, googleProvider } daripada "../config/firebase";
import {
createUserWithEmailAndPassword,
signInWithPopup,
log keluar,
} daripada "firebase/auth";
fungsi Auth () {
const [e-mel, setEmail] = useState("");
const [kata laluan, setPassword] = useState("");
const navigate = useNavigate();
console.log(auth?.currentUser?.email);
useEffect(()=> {
const userFromStorage = JSON.parse(sessionStorage.getItem("pengguna"));
if(userFromStorage){
console.log(userFromStorage);
navigasi("/papan pemuka");
}
} , [menavigasi]);
const signIn = tak segerak () => {
cuba {
tunggu createUserWithEmailAndPassword(auth, e-mel, kata laluan);
sessionStorage.setItem("pengguna" , JSON.stringify(auth.currentUser));
navigasi("/papan pemuka");
} tangkap (err) {
console.error(err);
}
};
const signInWithGoogle = async () => {
cuba {
tunggu signInWithPopup(auth, googleProvider);
sessionStorage.setItem("pengguna", JSON.stringify(auth.currentUser));
navigasi("./papan pemuka");
}tangkap (err) {
console.error(err);
}
};
const Log Keluar = tak segerak () =>
cuba {
tunggu signOut(auth);
sessionStorage.removeItem("pengguna");
} tangkap (err) {
console.error(err);
}
};
kembali (
<div>
<input placeholder="email" onChange={(e) => setEmail(e.target.value)} />
<masukan
type="kata laluan"
pemegang tempat="kata laluan"
onChange={(e) => setPassword(e.target.value)}
/>
<butang onClick={signIn}>log masuk</button>
<button onClick={signInWithGoogle}>log masuk dengan Google</button>
<butang onClick={Logout}>Logout</button>
</div>
);
};
eksport Auth;</pre>
<p>Tidak mahu ralat ini, sebagai pemula, jika ada ruang untuk penambahbaikan, sila beritahu saya. </p>
Anda harus mengendalikan status pengesahan secara tidak segerak.