尝试检查用户是否通过firebase.auth().currentUser
登录时,如下所示:
if (firebase.auth().currentUser === null) {
console.log('User not signed in');
}
每当我刷新页面,或浏览以上返回null(即使我刚刚登录)。
奇怪的是如果我记录
console.log(firebase.auth().currentUser) // This returns null
console.log(firebase.auth()) // Here I can inspect the object and currentUser exists...!
我真的不知道这里发生了什么。我正在使用React和Redux,但我想说这应该不重要。
在firebase初始化时是否有一个小的延迟,而你不能访问currentUser?如果有,我如何在firebase.auth()
的日志输出中看到它?
9条答案
按热度按时间9w11ddsr1#
这是一个常见问题。https://firebase.google.com/docs/auth/web/manage-users您需要向onAuthStateChanged添加一个观察器,以检测初始状态和所有后续状态更改,
unguejic2#
一个简单的方法是添加挂起状态。
下面是一个使用钩子的react示例:
//使用验证
//登录.tsx
1cosmwyk3#
始终访问currentUser的最佳方法是使用vuex和vuex-persistedstate
上面的唯一问题是,如果用户在浏览器上按下刷新,vuex状态将被丢弃,您必须等待onAuthStateChange再次触发,因此当您尝试访问currentUser时,会得到null。
上述代码一直工作的秘诀是使用vuex持久化状态。
在store.js文件中
您现在可以保护路由器中的路由,如下面的代码示例所示。
w7t8yxp54#
就承诺而言,有三种选择:
更新日期:2022年11月26日
对于Firebase 9+,您可以执行以下操作:
注意:(this.auth)是Auth对象,具体取决于您得框架.
第一个
x6yk4ghg5#
如果您正在寻找一个复制和粘贴Auth路由,以与firebaseReact:
zqdjd7g96#
ru9i0ody7#
最好的方法是使用promise,并且只在响应之后示例化路由器,沿着如下:
在checkAuth操作中,您可以在其中设置您的承诺,如下所示:
h/t给亚伦k桑德斯-为我这个解决方案的来源。
b09cbbtk8#
如果您希望用户仅在通过身份验证后才能访问某个页面,而在未通过身份验证时重定向到主页,则以下代码可能会有所帮助:
在React中:使用以下代码创建一个组件:
并在app.js中用途:
在Vue中:在路由器文件中用途:
并在要限制访问的页面的路由中添加:
ve7v8dk29#
首先检查用户是否存在,然后通过以下方式获取其ID
当前用户.uid