我有一个使用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注册时,首先给出。
答案 0 :(得分:1)
好的,我错过了fetchProvidersForEmail
方法。
仅供参考:(不是我将使用的最终代码)
signInWithEmailAndPassword
检查用户是否存在createUserWithEmailAndPassword
如果错误为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 );
});