Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带Email和password的登录时,获取Firebase User.ProviderID的身份验证/错误密码_Firebase_Firebase Authentication - Fatal编程技术网

使用带Email和password的登录时,获取Firebase User.ProviderID的身份验证/错误密码

使用带Email和password的登录时,获取Firebase User.ProviderID的身份验证/错误密码,firebase,firebase-authentication,Firebase,Firebase Authentication,我有一个使用Firebase进行身份验证的应用程序 我允许用户使用Google/Facebook/Twitter或电子邮件和密码登录 此外,我已在Firebase中激活,用户每封电子邮件只能创建一个帐户 我想介绍以下情况: 用户在facebook上注册,并获得使用其facebook电子邮件创建的用户帐户(例如facebookuser@gmail.com) 几天后,用户返回应用程序,但忘记了他使用facebook注册并尝试使用他们的电子邮件地址登录facebookuser@gmail.com和他们

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

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

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

我想介绍以下情况:

用户在facebook上注册,并获得使用其facebook电子邮件创建的用户帐户(例如
facebookuser@gmail.com

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

该方法抛出一个
auth/error password
错误,因为没有使用facebook登录方法给出密码,但电子邮件确实存在

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


不幸的是,似乎不存在一种方法来获取给定电子邮件的User.ProviderID,也不存在一种方法来理解是否由于用户输入了错误的密码而出现了
auth/错误密码
错误,或者在用户与OAuthProvider注册时没有首先给出密码。

好的,我错过了
fetchProvidersForEmail
方法

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

  • 使用带有电子邮件和密码的
    登录来检查用户是否存在
  • 如果没有,则使用
    createUserWithEmailAndPassword
  • 如果用户退出,它将尝试登录并捕获错误
  • 如果错误是
    auth/error password
    它将检查用户是否使用提供商注册

    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 );
    });
    

  • 问题是它实际上并没有链接到账户。它基本上只是说,嘿,你实际上有一个“谷歌”帐户在该电子邮件地址下,用它代替。