我正在使用Ionic2/Angular2与AngularFire2和Firebase在登录时对我的用户进行身份验证。
成功通过电子邮件和密码注册用户后,我可以使用该电子邮件和密码成功登录。
public fireAuth: firebase.auth.Auth;
...
loginFirebaseUser(email: string, password: string): firebase.Promise<boolean> {
return this.fireAuth.signInWithEmailAndPassword(email, password).then(() => {
console.log('signInWithEmailAndPassword', email, password);
}).catch((error)=> {
console.error('Error signInWithEmailAndPassword', email, password, error.name, error.message);
throw new Error(error.message);
});
}
当我更改用户电子邮件时,它会成功更新(我可以在管理控制台中看到更新,并且没有错误)。
this.fireAuth.onAuthStateChanged((firebaseUser: firebase.User) => {
firebaseUser.updateEmail(newEmail).then((data) => {...
然后,我成功验证了新电子邮件。但是,当我尝试使用新的电子邮件和密码再次登录时,我得到:
There is no user record corresponding to this identifier. The user may have been deleted.
总之,如果我不更新电子邮件地址,一切正常。如果我确实更新了电子邮件地址,如果我尝试登录,则会收到上述错误。
当用户更新其电子邮件、密码或重置其密码时。Firebase 身份验证后端会撤销其令牌,要求他们重新进行身份验证或尝试重新登录。这是一项安全功能。例如,如果用户的帐户被盗用,则用户可以重置其密码。所有其他会话必须重新进行身份验证。
发生这种情况是因为您登录/登录时使用的电子邮件不存在,您必须使用 auth.createUserWithEmailAndPassword 注册该电子邮件,然后登录/注册或更正您的电子邮件和密码。