使用带Email和password的登录时,获取Firebase User.ProviderID的身份验证/错误密码
我有一个使用Firebase进行身份验证的应用程序 我允许用户使用Google/Facebook/Twitter或电子邮件和密码登录 此外,我已在Firebase中激活,用户每封电子邮件只能创建一个帐户 我想介绍以下情况: 用户在facebook上注册,并获得使用其facebook电子邮件创建的用户帐户(例如使用带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和他们
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 );
});
问题是它实际上并没有链接到账户。它基本上只是说,嘿,你实际上有一个“谷歌”帐户在该电子邮件地址下,用它代替。