我设法使用 Firebase 设置了自定义登录系统。用户输入电子邮件/密码并重定向到主页(这是私有的)。登录后我遇到 onAuthStateChanged 问题。当我登录主页面后检查身份验证状态时,我得到无效用户(空)。 firebase 仪表板显示我已成功登录,但 onAuthStateChanged 正好相反。
我正在尝试检查用户是否登录到我的 html 页面,如果没有,我想将它们重定向到登录页面。我喜欢身份验证在 firebase 中的工作方式,但我需要保护我的 html 页面而不是我的 div(这是绝大多数 firebase 身份验证教程显示的内容)。
如果有人有更简单的密码保护网络目录的方法,它看起来比 HTaccess 更好,请提供建议(我并不热衷于使用 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');
}
});
})();
答案 0 :(得分:0)
如果您导航到一个新页面,Firebase 将不得不再次初始化。作为其中的一部分,它将尝试恢复用户的身份验证状态,但这需要调用服务器,这需要时间。
出于这个原因,onAuthStateChanged
侦听器最初将 null
作为当前用户触发(并且 auth.currentUser
设置为 null
)。然后,一旦用户登录,侦听器将再次使用该用户的 user
对象触发。
如果你想检测这个初始状态,你可以在浏览器的本地存储中存储一些令牌值,你可以在新页面上自己检查,或者你可以设置一个超时时间,当你希望用户重新登录,然后才导航到 index.html
页面。