【问题标题】:Firebase authentication onAuthStateChanged responding after function bodyFirebase 身份验证 onAuthStateChanged 在函数体后响应
【发布时间】:2020-05-17 16:57:45
【问题描述】:

我正在使用 firebase 创建一个应用程序。加载任何页面时,我正在通过以下代码检查身份验证。当我从登录页面调用 isAuthenticated 时,即使用户已经登录并且持久性为 LOCAL(https://firebase.google.com/docs/auth/web/auth-state-persistence),它也会返回 false,返回 false 后会执行内部函数。

身份验证.ts

import {auth} from "../firebase";

export function isAuthenticated() {
    console.log("Started!");
    auth.onAuthStateChanged(function(user) : boolean {
        console.log("Coming inside authentication");
        if (user) {
            console.log('User signed in - auth success! ', user.email);
            return true;
        } else {
            console.log('User not signed in - auth failed! ');
            return false;
        }
    });
    console.log("Something wrong, coming here!");
    return false;
};

即使在内部 onAuthStateChanged 函数运行之前,我也会变得错误。请看屏幕截图。

如何确保我总是得到内部函数的返回值。

【问题讨论】:

    标签: javascript reactjs firebase firebase-authentication


    【解决方案1】:

    auth.onAuthStateChanged 不会返回任何有用的信息。它异步添加了一个侦听器,每当用户登录或注销时都会调用该侦听器。它对于立即了解用户状态并不是很有用,而且您不能简单地从回调中返回一个值以用于封闭函数。

    如果您想立即知道用户当前是否登录或退出,您应该只使用auth.currentUser 来获取用户对象。如果用户退出,它将为空。但是,此状态可能会随着时间而改变。如果您对随时间的变化感兴趣,请改用监听器。

    【讨论】:

    • 我在 isAuthenticated 方法顶部的控制台中打印了auth.currentUser,auth.currentuser 为空,但 authstatechanged 返回 true,这是正确的,我不明白这种行为,谢谢。
    • 这是因为当前用户在页面加载时可能不会立即可用。在这种情况下,您将无法使用 currentUser,但您也无法调用任何函数。您必须等到侦听器告诉您有登录用户才能继续。
    • stackoverflow.com/questions/58769189/… 找到了我真正需要的东西,谢谢你的澄清。
    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 2020-03-15
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多