使用signInWithEmailAndPassword时在身份验证/错误密码上获取Firebase User.ProviderID

Sno*_*all 7 firebase firebase-authentication

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

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

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

我想介绍以下案例:

用户在 Facebook 上注册并获得使用其 Facebook 电子邮件 (eG facebookuser@gmail.com) 创建的用户帐户。

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

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

而不是显示无用的“密码错误或邮箱对应的账户没有设置密码”。错误 我想检查使用哪个提供商进行注册并提醒用户使用该提供商登录。

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

Sno*_*all 6

好吧,我已经忘记了fetchProvidersForEmail方法。

\n\n

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

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

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