使用signInWithEmailAndPassword时,在auth / wrong-password上获取Firebase User.ProviderID

时间:2017-10-23 10:31:40

标签: firebase firebase-authentication

我有一个使用Firebase进行身份验证的应用程序。

我允许用户使用Google / Facebook / Twitter或使用电子邮件和密码登录。

此外,我已在Firebase中激活,用户每封电子邮件只能创建一个帐户。

我想介绍以下案例:

用户注册Facebook并获取使用他们的Facebook电子邮件创建的用户帐户(例如facebookuser@gmail.com)。

几天后,用户回到应用程序,但忘了他使用Facebook注册并尝试使用他们的电子邮件地址facebookuser@gmail.com和他们通常的密码登录。

firebase.auth().signInWithEmailAndPassword(email, password)方法抛出auth/wrong-password错误,因为没有使用facebook登录方法提供密码,但电子邮件确实存在。

而不是显示无用的“错误的密码或与电子邮件对应的帐户没有设置密码。”错误我想检查哪个提供商用于注册和提醒用户使用提供商登录。

不幸的是,似乎没有一种方法可以获取给定电子邮件的User.ProviderID,或者了解是否因为用户输入了错误的密码或者没有密码而导致出现auth/wrong-password错误当用户使用OAuthProvider注册时,首先给出。

1 个答案:

答案 0 :(得分:1)

好的,我错过了fetchProvidersForEmail方法。

仅供参考:(不是我将使用的最终代码)

  1. 使用signInWithEmailAndPassword检查用户是否存在
  2. 如果它没有使用createUserWithEmailAndPassword
  3. 创建它
  4. 如果用户退出,则会尝试登录并捕获错误
  5. 如果错误为auth/wrong-password,则会检查fetchProvidersForEmail用户是否使用了提供商进行注册

    firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
    
        // User not found? Create user.
        if ( errorCode === 'auth/user-not-found' ) {
            firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
                // Handle Errors here.
                var errorCode = error.code;
                var errorMessage = error.message;
                if ( errorCode == 'email-already-in-use' ) {
                    alert('You already have an account with that email.');
                } else if ( errorCode == 'auth/invalid-email' ) {
                    alert('Please provide a valid email');
                } else if ( errorCode == 'auth/weak-password' ) {
                    alert('The password is too weak.');
                } else {
                    alert(errorMessage);
                }
                console.log(error);
            });
        // Wrong Password Error
        } else if ( errorCode === 'auth/wrong-password' ) {
            // Check if User has signed up with a OAuthProvider
            firebase.auth().fetchProvidersForEmail(email).then(function( result ){
                // … show OAuthProvider Login Button
            });
            alert('Wrong password. Please try again');
        } else {
            alert( errorMessage );
        }
        console.log( error );
    });