javascript - React js Firebase 身份验证无法正常工作

标签 javascript reactjs firebase firebase-authentication

我正在尝试保护我的所有路线,因为我正在尝试一种逻辑,但它没有按照我想要的方式工作。

我正在使用 app.js 文件,因为我有我的路由文件。我正在使用功能组件。

我在 app.js 中的代码是:

export default function App(props) {    
  useEffect(() => {
  }, []);
  var logged = null
  var user = firebase.auth().currentUser;
  if (user) {
    logged = true
    console.log("user exist", user);    
  } else {
    logged = false
    console.log("user don't exist", logged);
  }

  const PrivateRoute = ({ component: Component, ...rest }) => (
    <Route
      {...rest}
      render={props =>
        //fakeAuth.isAuthenticated === true ? (
          logged === true ? (
          <Component {...props} />
        ) : (        
          <Redirect to="/signIn" />
        )
      }
    />
  );

   <PrivateRoute path="/features" component={FeaturePage} />

 }

此代码工作正常,但当我刷新页面或尝试从浏览器访问 URL 时,它不起作用。

当我尝试添加逻辑时:

 var logged = null

  useEffect(() => {
    // CLEAN UP
    var user = firebase.auth().currentUser;
    if (user) {
      logged = true
      console.log("user exist", user);    
    } else {
      logged = false
      console.log("user don't exist", logged);
    }
    return () => {
      document.querySelector('.first-row').style.position = '';
    };
  }, []);

这不起作用,我的问题是如何创建我的 app.js 文件,检查用户是否每次从浏览器或任何方式打开路由时检查用户是否登录。它应该知道它是否已登录。

Firebase 请提供一些示例,否则我们将不胜感激。

最佳答案

您可以分两步完成。

第一步是使用 useState 使 logged 成为一个状态。它现在只是一个局部变量,因此在第二个示例中,该值的更改不会传播到路由。因此,使其成为一种状态,在 useEffect 中添加更新逻辑,如第二个示例中所示。

第二步是使用 Firebase AuthStateListener 监听用户的身份验证状态更改,它监听您的身份验证状态更改(包括 currentUser 的初始加载)并调用其回调,然后根据结果更新状态。

关于javascript - React js Firebase 身份验证无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60020210/

相关文章:

javascript - 如何将下一个同级移动到CSS Grid中的下一行?

javascript - 错误: summernote is not a function when using local files

javascript - 测试失败 - 多次调用 Mocha 的 done()

ReactJS:根据状态淡入div和淡出div

android - 如何在 Firebase 实时数据库中使用结束日期时间

ios - 完成的 Firebase 嵌套查询

javascript - 当我使用 import * as firebase from 'firebase' 导入 firebase 时;?

javascript - $(...).sparkline 不是函数(jQuery Sparklines)

javascript - ajax 内部 ajax 成功

javascript - 文本文件转为 JSON,最后几行不包含在结果中