登录和注册的流程相同:Firebase Auth

时间:2016-12-16 10:15:16

标签: firebase-authentication

我正在使用帐户套件,需要将number@app.com存储在firebase上。所以我尝试用他们的电子邮件和密码流程。 但我发现它们的问题是它们有两个不同的流程:一个用于创建用户,该用户在注册时创建 - createUserWithEmailAndPassword,另一个在登录流程中启动,需要在用户已经登录时启动创建了-signInUserWithEmailAndPassword。

是否存在类似创建和登录呼叫的内容,可以确定它是否是第一次使用者,因此创建它或现有用户。

我可以在我的终端进行服务器检查,但它会带来延迟和对不同系统的多次调用。

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

firebase.auth().fetchProvidersForEmail(email)
    .then(function(providers) {
      if (providers.length > 0 ) {
        // The user has already been registered. Careful though: the
        // following assumes that your users only sign up with email
        // and password. If they can sign up with other providers
        // (Google, Facebook...), you may not be able to do the next
        // call.
        return firebase.auth().signInWithEmailAndPassword(
            email, password);
      } else {
        // No account exists with this email address.
        return firebase.auth().createUserWithEmailAndPassword(
            email, password);
    }).then(function(user) {
      // User is signed in!
    });

这将首先检查链接到该电子邮件地址的提供商。如果列表不为空,并且您的用户只能使用电子邮件和密码注册(因此没有Google登录,Facebook登录等),那么可以保证用户已经注册了电子邮件和密码。在这种情况下,您可以登录用户。如果列表为空,则不存在用户,您可以创建新用户。

这会回答你的问题吗?

答案 1 :(得分:0)

您可以创建一个新帐户并验证是否已使用电子邮件,然后登录。

const auth = firebase.auth();
auth.createUserWithEmailAndPassword(email, password).then(cred => {

}).catch(err => {
    if(err.code === 'auth/email-already-in-use') {
        auth.signInWithEmailAndPassword(email, password).then(cred => {
            console.log(cred);
        }).catch(err => {
            console.log(err.message);
        })
    } else {
        console.log(err.message);
    };
});