亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

onAuthStateChanged 應用程序刷新時的 Firebase 偵聽器導致私有路由問題

onAuthStateChanged 應用程序刷新時的 Firebase 偵聽器導致私有路由問題

智慧大石 2023-07-14 15:30:33
我目前已經使用 firebase 初始化了一個 React 應用程序。在應用程序中,我使用react-router-dom創建了一個開放的登錄路由和一個私有的Home路由。我的 app.js 看起來像這樣:應用程序.js:import React from 'react'import { BrowserRouter, Switch, Route } from 'react-router-dom'import Login from './pages/Login'import Home from './pages/Home'import PrivateRoute from './utils/PrivateRoute'const App = () => {  return (    <BrowserRouter>      <Switch>        <PrivateRoute exact path='/' component={Home} />        <Route path='/login' component={Login} />      </Switch>    </BrowserRouter>  )}export default App我使用 onAuthStateChanged firebase 事件監聽器將 currentUser 存儲在上下文中,如下所示:應用程序上下文:import { useEffect, useState, createContext } from 'react'import { auth } from '../utils/firebase'export const AppContext = createContext()export const AppProvider = ({ children }) => {  const [currentUser, setCurrentUser] = useState(null)  useEffect(() => {    auth.onAuthStateChanged(setCurrentUser)  }, [])  return (    <AppContext.Provider value={{ currentUser }}>      {children}    </AppContext.Provider>  )}我遇到的問題是,當應用程序刷新時,currentUser 最初變為 null,然后 currentUser 的信息會重新加載。當刷新時 currentUser 為 null 時,用戶將從主路由中踢出并重定向到登錄頁面。我想知道是否有人對如何防止這種情況發生有任何建議。
查看完整描述

1 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

您使用currentUser空值初始化狀態變量:

const?[currentUser,?setCurrentUser]?=?useState(null)

這意味著currentUser當頁面首次加載時,它最初總是為空。之前的用戶對象只有在 Firebase SDK 異步加載一段時間后才能確定。您的代碼需要為此做好準備。如果您要求用戶在渲染組件之前登錄,則應該等待onAuthStateChanged實際用戶對象的首次觸發。


查看完整回答
反對 回復 2023-07-14
  • 1 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號