验证用户是否通过Firebase中的电子邮件进行了注册

时间:2016-12-15 18:22:34

标签: javascript firebase firebase-authentication

当用户在我的网站上注册时,我致电firebase.auth().createUserWithEmailAndPassword(email, password)并且他们的用户已成功创建。

我基本上想在我的页面上找到“我有一个帐户”。如果他们输入了他们的电子邮件地址,它应该只向他们的电子邮件发送请求给Firebase,然后Firebase应该返回true / false(或类似的东西)。

我找到的“解决方法”是尝试创建用户或只是使用空密码登录Firebase。我假设Firebase会返回“错误的密码”(意味着他们有一个帐户)。 firebase.auth().fetchProvidersForEmail("some@email.com")也可以运作,但我无法弄清楚它是如何运作的。

或者,我将所有电子邮件存储在一个数组中。当新用户注册时推送到该阵列,但这似乎非常不安全,并且像很多工作(因为我认为你不能只是推送电子邮件而忘记ID,基本上不可能遍历所有电子邮件)

以下是我的想法:

firebase.auth().signInWithEmailAndPassword(this.username, " ").catch(function(error) {
    if(error.code === "auth/wrong-password") {
        console.log("USER HAS AN ACCOUNT");
    } else if(error.code === "auth/user-not-found"){
        console.log("NEW USER");
    }
});

只需使用无法使用的密码登录。

1 个答案:

答案 0 :(得分:1)

以下是您可以采用的一种方式:当用户首次注册时,以密钥友好的方式对其电子邮件进行编码并将其粘贴到实时数据库中:

firebase.database().ref('accountCheck')
  .child(user.email.replace(/\./g, '%2E')).set(true)

然后编写安全规则,以便可以单独访问电子邮件列表,但不能集体访问:

{
  "rules": {
    "accountCheck": {
      ".read": false,
      ".write": false,
      "$encoded": {
        ".read": true,
        ".write": "$encoded === auth.token.email.replace('.', '%2E') && newData.val() === true"
      }
    }
  }
}

现在,您的模糊检查将获取输入的值,并查看它是否存在于DB中:

firebase.database().ref('accountCheck')
  .child(input.value.replace(/\./g, '%2E'))
  .once('value').then(snap => {
    if (snap.exists()) {
      // account exists
    }
  });
相关问题