Firebase - Auth - 发现已注册但未验证电子邮件的用户

Posted

技术标签:

【中文标题】Firebase - Auth - 发现已注册但未验证电子邮件的用户【英文标题】:Firebase - Auth - discover users who signed up but not verified email 【发布时间】:2016-10-20 18:58:19 【问题描述】:

我已经设置了一个 Firebase 项目,我将其用于用户身份验证模块。我也在使用来自 Github 的 firebaseui-web 项目。

根据此代码,我的登录重定向工作正常:

// FirebaseUI config.
var uiConfig = 
  'signInSuccessUrl': 'MY_REDIRECT.html',
  'signInOptions': [
    firebase.auth.EmailAuthProvider.PROVIDER_ID
  ],
  // Terms of service url.
  'tosUrl': '<your-tos-url>',
;

当页面加载(即 MY_REDIRECT.html)时,我正在检查用户的状态以查看他们是否验证了他们的电子邮件,如果没有,则调用 sendEmailVerification method:

checkLoggedInUser = function() 
  auth.onAuthStateChanged(function(user) 
    if (user) 
      // is email verified
      if(user.emailVerified) 
        // show logged in user in UI
        $('#loggedinUserLink').html('Logged in:' + user.email + '<span class="caret"></span>');        
       else 
        // user e-mail is not verified - send verification mail and redirect
        alert('Please check your inbox for a verification e-mail and follow the instructions');
        // handle firebase promise and don't redirect until complete i.e. .then
        user.sendEmailVerification().then(function() 
          window.location.replace('index.html');
        );
      
     else 
      // no user object - go back to index
      window.location.replace("index.html");
    
  , function(error) 
    console.log(error);
  );
;

window.onload = function() 
  checkLoggedInUser()
;

到目前为止一切顺利 - Firebase 正在做我想做的事!谢谢大家:)

但是,在 Firebase 控制台 UI 中,似乎没有一种方法可以查看用户是否真的进入了他们的收件箱并点击了链接来执行验证。用户界面如下所示:

我已经运行了基本测试,并且用户 UID 在验证前后没有改变。

那么,这是我的问题 - 我是否正确地进行了电子邮件验证?如果是这样(因此 UI 没有显示我已验证与未验证)是否有一种可接受的方法来访问 Auth 模块中的这两组用户?我看不到访问 UID 基础表及其属性(包括 emailVerified 属性)的方法。如果控制台中没有该功能,我不介意编写更多代码 - 只是希望在下一步中朝着正确的方向轻推。

【问题讨论】:

【参考方案1】:

目前无法在 Firebase 控制台中查看特定用户的电子邮件地址是否已经过验证。 API to get a list of users,但您无法过滤它们是否经过验证。

您可以检查当前已通过身份验证的用户的电子邮件地址是否通过以下方式验证:

firebase.auth().currentUser.emailVerified

您无法阻止谁注册。但您可以轻松确保只有拥有经过验证的电子邮件地址的用户才能访问(某些)数据。例如:


  "rules": 
    ".read": "auth != null && auth.token.email_verified",
    "gmailUsers": 
      "$uid": 
        ".write": "auth.token.email_verified == true && 
                   auth.token.email.matches(/.*@gmail.com$/)"
      
    
  

上述规则确保只有经过验证的电子邮件地址的用户才能读取任何数据,并且只有经过验证的 gmail 地址的用户才能在gmailUsers 下写信。

【讨论】:

非常感谢您的澄清。我正在使用这种逻辑来防止人们使用mickey@mouse.com 之类的电子邮件进行注册,因为我的偏好是能够收集想要使用该网站的用户的真实联系信息。你会推荐我的不同方法吗?我认为审查虚假电子邮件地址的能力将是一个合理的要求。了解使用社交媒体登录可以解决此问题。再次感谢。 所以没有办法访问我项目的完整用户列表?这似乎有点奇怪——新人注册时构建辅助数据库的解决方法是什么?我觉得我一定是误会了什么。如果合适,请随时让我提出一个新问题。 如果有人遇到这个,请到这里:***.com/questions/35613533/…

以上是关于Firebase - Auth - 发现已注册但未验证电子邮件的用户的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 实时数据库安全规则允许更新但未设置

无法在 Flutter 中使用 Firebase Auth 进行注册

在 Flutter App 的 Firebase Auth 中检查电子邮件是不是已存在

firebase.auth().onAuthStateChanged 不工作

收到 Firebase 注册令牌但未显示通知

Firebase 打印 Analytics SSL 错误,但未使用 Analytics