reactjs - React 路由器和身份验证上下文
问题描述
我有一个使用 firebase 来处理其身份验证的 React 应用程序。目前,我firebaseApp.auth().onAuthStateChanged(setCurrentUser);
用来获取用户是否登录并将其传递到上下文中,以便我的其他组件访问它们。下面是我的 AuthContext 和 AuthProvider 代码
export const AuthContext = React.createContext();
export const AuthProvider = ({children}) => {
const [currentUser, setCurrentUser] = useState(null);
useEffect(() => {
firebaseApp.auth().onAuthStateChanged(setCurrentUser);
},[]);
return (
<AuthContext.Provider
value = {{currentUser}}
>
{children}
</AuthContext.Provider>
);
};
此 Auth Provider 用于封装我的路由器,以便所有路由都可以访问 Auth Context
<AuthProvider>
<Router>
<Switch>
<LoggedRoute exact path = "/" component = {Home}/>
<Route exact path = "/login" component = {Login}/>
<Route exact path = "/groups/:id" component = {GroupDash}/>
</Switch>
</Router>
</AuthProvider>
但是,在我的 GroupDash 组件中,如果我直接尝试转到“.../groups/groupID”,则无法访问 AuthContext,但如果我history.push("/groups/${groupID}")
从另一个具有 AuthContext 的页面使用,则可以访问它。因此,由于 currentUser 为空,我总是收到错误消息。上下文是否有任何理由不传入?我肯定登录了。
const {currentUser} = useContext(AuthContext);
useEffect(() =>{
groupRef.get().then(snapshot =>{
const groupData = snapshot.data()
const uids = []
groupData.groupMembers.forEach(member =>{
uids.push(member.uid)
})
permitted.current = uids.includes(currentUser.uid)
})
}, [currentUser.uid, groupRef])
解决方案
推荐阅读
- jquery - 如果存在未定义的内联背景图像,请使用 jQuery 删除 DIV
- c# - 多个下拉框不拾取新元素(Selenium,C#)
- sql - 仅将某些列从一个表复制到另一个表并插入 defa
- javascript - 我收到错误消息:无法注册 ServiceWorker:获取脚本时收到错误的 HTTP 响应代码 (404)
- libgdx - 当我将代码编译为 HTML5 时,它并不总是接受新的更改
- c++ - do while 中的无限循环
- python - 调整字典中的数据,然后绘制它
- python - 从 Pandas 形式的 iris 数据集到 sk-learn 形式的有效方法?
- postgresql - pgpool2 看门狗在尝试使用 docker-compose 设置相互连接时崩溃
- vba - 从外部 excel VBA 更新电子表格