【发布时间】:2021-12-31 21:58:47
【问题描述】:
我想学习firebase路由认证的正确方法,我的意思是:
function App() {
const auth = getAuth();
if (!auth) {
<Spinner />;
}
return (
<>
{auth && (
<Router>
<Routes>
<Route path='/' element={<PrivateRoute />}>
<Route index element={<Explore />} />
<Route path='/offer' element={<Offers />} />
<Route path='/profile' element={<Profile />} />
</Route>
<Route path='/sign-in' element={<SignIn />} />
<Route path='/sign-up' element={<SignUp />} />
<Route path='/forgot-password' element={<ForgotPassword />} />
</Routes>
<Navbar />
</Router>
)}
我有这个代码块,起初我以为我应该得到一个使用 onAuthStateChanged 的 useAuth 钩子,但我意识到这个 auth 来自 getAuth 的变量的工作方式是一样的,那么为什么不使用它来代替钩子呢?
而我的 PrivateRoute 看起来像这样:
function PrivateRoute() {
const currentUser = getAuth().currentUser;
return currentUser ? <Outlet /> : <Navigate to='/sign-in' />;
}
问题是一旦应用挂载,由于没有应用级状态,它保持不变。
然后,如果我尝试注销并将一些逻辑放入路由中,例如如果用户存在,则不允许路由注册或登录,它不起作用。
如果我使用 redux 或 context API,我会在我登录、注销、注册时调度,但没有它们处理这种路由的正确设置是什么?
【问题讨论】:
标签: javascript reactjs firebase authentication frontend