6

我已经设置了一个 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 方法

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属性)的方法。如果控制台中没有该功能,我不介意编写更多代码 - 只是希望在下一步中朝着正确的方向轻推。

4

1 回答 1

11

Firebase 控制台目前无法查看特定用户的电子邮件地址是否已经过验证。有一个API可以获取用户列表,但您无法过滤他们是否经过验证。

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

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.

于 2016-06-19T14:43:32.853 回答