javascript - 如何在 React JS 和 Firebase 中处理用户登录状态?
问题描述
我正在使用 React JS 和 Firebase 开发一个网络应用程序。我希望以下行为在我的应用程序中起作用。
在登录页面上,有一个复选框“让我保持登录状态”。如果用户未标记该复选框,则在关闭选项卡/浏览器时应自动注销用户。如果用户标记了复选框“让我登录”,除非用户单击仪表板中的“退出”按钮,否则用户将不会退出。此外,如果用户已登录,则应将用户重定向到仪表板页面。如果用户未登录,则应将用户重定向到登录页面。
而且,用户不应该能够通过手动输入 URL 来访问页面。
这是我当前 index.js 文件的一部分。
const browserHistory = createBrowserHistory();
firebase.auth().onAuthStateChanged(user => {
user ? browserHistory.push("/dashboard") : browserHistory.push("/signin");
});
ReactDOM.render(
<Router history={browserHistory}>
<Switch>
<Theme>
<Route exact path="/signin" component={SignIn} />
<Route path="/dashboard" component={Dashboard} />
<Redirect to="/" />
</Theme>
</Switch>
</Router>,
document.getElementById('root')
);
在这里,我的问题是,用户可以在重定向后返回。我认为这不是正确的方法。
所以,请帮助我完成这种行为。非常感谢用代码示例回答。
解决方案
history.replace
是Redirect
组件的功能等价物。
replace(path, [state])
- (function) 替换历史堆栈上的当前条目
firebase.auth().onAuthStateChanged(user => {
browserHistory.replace(user ? "/dashboard" : "/signin");
});
成功登录后您可能还想做的是再次重定向到仪表板。
推荐阅读
- autodesk-forge - 伪造查看器坐标单元并将其映射到 ThreeJS 场景
- angular - 使用 Phantom JS 测试 ng 项目时出错
- laravel - 带有主管的 Laravel 队列工作者
- android-studio - 'ACTION_MEDIA_SCANNER_SCAN_FILE:String' 已弃用
- spring-boot - 为 Google Cloud Run 外部化应用程序配置
- git - Docker npm install 因本地依赖项而失败,但在命令行中工作
- php - Laravel 以特定格式显示日期
- javascript - 打印时div中的图像在页面之间被切断
- php - 将每个操作记录到数据库 Yii2
- python - 如果我们不止一次地写一个字符串,追加是如何工作的