【问题标题】:Getting Uncaught TypeError in Firebase Auth get current user email在 Firebase Auth 中获取未捕获的 TypeError 获取当前用户电子邮件
【发布时间】:2021-06-13 09:34:23
【问题描述】:

我试图在我的 Firebase 应用中获取当前登录用户的电子邮件,但它一直给我一个错误。

这是我获取当前用户电子邮件的代码:

user_email = firebase.auth().currentUser.email

我得到的错误是: Error Image

【问题讨论】:

    标签: javascript firebase firebase-authentication


    【解决方案1】:

    在您的 firebase.auth().currentUser.email 运行时,firebase.auth().currentUser 似乎为空。这很常见,因为 Firebase 在页面加载时会刷新用户的身份验证状态,这需要它对服务器进行异步调用。

    因此,您不应假设有用户登录。您应该检查当前代码:

    if (firebase.auth().currentUser) {
      user_email = firebase.auth().currentUser.email
    }
    

    或者(通常更好)您应该使用所谓的身份验证状态侦听器,让您的代码自动响应用户身份验证状态的变化。从 getting the currently signed-in user 上的 Firebase 文档中可以看出:

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/firebase.User
        var uid = user.uid;
    
        user_email = firebase.auth().currentUser.email;
    
        // TODO: execute code that needs `user_email`
    
      } else {
        // User is signed out
        // ...
      }
    });
    
    

    【讨论】:

    • 是的,我尝试添加 if 语句,但我知道用户没有签名。我在一个函数中使用它。就我而言,我不能在运行此功能之前要求用户登录,因为这看起来很奇怪。我该如何前进? @弗兰克
    • 我不明白你的意思。您是否使用了我在回答中显示的firebase.auth().onAuthStateChanged
    • 是的,我使用了它,它显示用户没有登录。我在 else 语句中添加了一个警报命令。有没有办法防止在页面加载时自动刷新用户的身份验证状态并保持用户登录直到他退出?
    • 不,Firebase 始终在页面加载时验证用户的凭据。例如,您可能在服务器上禁用了用户的帐户,此时它会处理该帐户。但是,如果 onAuthStateChanged 在没有 user 的情况下触发,则听起来用户未登录。由于 Firebase 不会自动将用户注销,您可能需要检查浏览器开发人员的“网络”选项卡中正在进行的调用控制台查看页面加载期间发生的情况 - 并使用该信息(和更新的代码)更新您的问题。
    • 我为此页面使用了单独的 js 文件。我头脑风暴了一下,找到了办法。我为索引页面导入了 js 文件,其中存储了用户电子邮件的变量,并在我当前的 js 文件中使用了该变量。但我无法理解你,因为我是网络开发的新手。能不能用通俗的语言解释一下。学习新事物会很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2011-06-13
    • 1970-01-01
    • 2020-08-05
    相关资源
    最近更新 更多