我正在用角度制作一个网络应用程序。我用 firebase 连接了登录。我想实现密码重置功能。输入电子邮件并点击“忘记密码”按钮,电子邮件已成功发送。问题是,如果我输入数据库中没有的电子邮件,则总是执行下一个块而不是错误,也就是说,它总是说电子邮件已成功发送。我需要更改什么才能在输入数据库中不存在的电子邮件时执行错误块?
signin.component.ts
forgotPassword() {
this.isRecoveringPassword = true;
this.authenticationService.forgotPassword(this.form.value.email).subscribe({
next: () => {
this.isRecoveringPassword = false;
this.snackBar.open(
'Password reset email has been sent to your email account.',
'OK',
{
duration: 5000,
}
);
},
error: (error: any) => {
this.isRecoveringPassword = false;
this.snackBar.open(error.message, 'OK', {
duration: 5000,
});
},
});
}
身份验证.service.ts
forgotPassword(email: string): Observable<void> {
return from(this.auth.sendPasswordResetEmail(email));
}
signin.component.html
<button
mat-button
[disabled]="!form.get('email')!.valid"
(click)="forgotPassword()"
*ngIf="!isRecoveringPassword"
test-id="forgot-password-button"
>
Forgot your password?
</button>
这是自 2023 年 9 月 15 日以来创建的项目的预期行为。在这些较新的项目中,Firebase 已自动启用针对电子邮件枚举攻击的保护,并且您期望 API 的工作方式将启用此类攻击。
有关此内容的更多信息,请参阅有关 电子邮件枚举保护
的文档您要么必须针对当前行为进行编码,要么禁用保护(如文档中所示)。