javascript - Firebase 身份验证 - 登录用户为空
问题描述
我已经设法使用 Firebase 设置了一个自定义登录系统。用户输入电子邮件/密码并被重定向到主页(这是私有的)。登录后我遇到 onAuthStateChanged 问题。当我登录主页后检查身份验证状态时,我得到无效用户(null)。firebase 仪表板显示我已成功登录,但 onAuthStateChanged 却相反。
我正在尝试检查用户是否登录到我的 html 页面,如果没有,我想将它们重定向到登录页面。我喜欢身份验证在 firebase 中的工作方式,但我需要保护我的 html 页面而不是我的 div(这是绝大多数 firebase 身份验证教程所显示的)。
如果有人有更简单的方法来密码保护看起来比 HTaccess 更好的 web 目录,请建议(我并不热衷于使用 wordpress 进行密码保护,但它是一种选择)。否则,我想我将不得不在 PHP 中执行此操作。提前致谢!
(function () {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
console.log(user);
console.log('A user is logged in.');
} else {
// No user is signed in.
console.log('Invalid user. Redirecting to root.');
window.location.replace('../index.html');
}
});
})();
解决方案
如果您导航到新页面,Firebase 将不得不再次初始化。作为其中的一部分,它将尝试恢复用户的身份验证状态,但这需要调用服务器,这需要时间。
因此,onAuthStateChanged
侦听器最初将以null
当前用户身份触发(并auth.currentUser
设置为null
)。然后,一旦用户登录,侦听器就会再次触发user
该用户的对象。
如果你想检测这个初始状态,你可以在浏览器的本地存储中存储一些令牌值,你可以在新页面上自己检查,或者你可以设置一个超时时间,让你希望用户重新-登录,然后才导航到该index.html
页面。
推荐阅读
- reactjs - 在反应中,对象似乎是使用 fetch 的空对象
- python - 为什么在将批量 csv 转换为 json 时我的代码不起作用?
- jquery - 访问从服务器返回的 DataTable 数据
- php - 显示产品的计量单位
- hadoop - 有没有办法将数据从 redshift 加载到 HDFS?
- scala - 如何模式匹配案例类的父特征(或类或对象)?
- reactjs - 在 React-Mapbox-GL 中实现自定义缩放
- java - findViewById 方法有问题
- javascript - 如何在单击时从状态数组中删除值
- node.js - 如何使用在其代码中执行另一个库的 bin 的 NPM 库?