Fis*_*egs 4 backend node.js firebase reactjs firebase-authentication
所以我有一个使用 firebase auth 和 firestore 的很棒的 React 应用程序。一切正常,除了
每当我在用户已经登录时重新加载页面...导航栏链接就会改变一秒钟。看起来应用程序会在每个页面重新加载时自动重新登录(重新验证)用户。为什么这样?如何摆脱它?一些看起来相似的代码示例
import React, {useState, useEffect} from 'react';
import {Switch, Route} from 'react-router-dom'
import firebase from 'firebase/App'
export const App = () => {
const [isAuth, setIsAuth] = useState()
const auth = firebase.auth()
useEffect(() => {
auth.onAuthStateChanged(user => {
if(user) {
setIsAuth(true)
} else {
setIsAuth(false)
}
})
}, [isAuth])
return(
<div className="App">
<Navbar />
<Switch>
<Route to="/signIn" component={Login} />
<Route to="/signUp" component={SignUp} />
<Route to="/signOut" component={SignOut} />
</Switch>
</div>
)
};
Run Code Online (Sandbox Code Playgroud)
终于修好了。
发生这种情况的原因是 bcoz firebase 服务器在每个页面重新加载时验证用户,这需要一些时间并导致导航栏闪烁半秒。
解决方案只需三个简单步骤
登录后,将用户作为布尔值存储在本地存储中。
firebase.auth().onAuthStateChanged(user=>{
if (user) {
// store the user on local storage
localStorage.setItem('user', true);
} else {
// removes the user from local storage on logOut
localStorage.removeItem('user');
}
})
Run Code Online (Sandbox Code Playgroud)
在导航栏组件中检查本地存储中的用户
const userLocal = JSON.parse(localStorage.getItem('user'));
userLocal ? <SignedInLinks/> : <SignedOutLinks/>;
Run Code Online (Sandbox Code Playgroud)
注销时从本地存储中删除用户
| 归档时间: |
|
| 查看次数: |
4942 次 |
| 最近记录: |