Firebase auth抛出的异常在catch中处理,但之后仍未捕获

t98cgbkg  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(141)

我正在实现一个与Firebase集成的Angular应用程序,并试图在用户使用不正确的凭据登录时处理错误:

@Injectable({
  providedIn: 'root',
})
export class UserService {
  constructor(private router: Router, private firebaseAuthService: AngularFireAuth) {
    this.firebaseAuthService.setPersistence('session');
  }

  login(email: string, password: string) {
    this.firebaseAuthService
      .signInWithEmailAndPassword(email, password)
      .then(() => this.router.navigateByUrl('foo'))
      .catch(() => console.log('error handled'));
  }
}

字符串
catch方法成功地“处理”了错误,但是,在此之后,我仍然以一个未捕获的异常结束。
控制台输出:
错误处理
错误FirebaseError:Firebase:没有与此标识符对应的用户记录。用户可能已被删除。(auth/user-not-found). at错误内部(index-e3 d5 d3 f4.js:497:41)at _fail(index-e3 d5 d3 f4.js:468:11)at index-e3 d5 d3 f4.js:911:17在Generator.next()在PencGeneratorStep(jsctoGenerator. js:3:1)at _next(jsctoGenerator.js:22:1)at _ZoneDelegate. invoke(zone. js:372:26)at Object. ongluke(core.mjs:24210:33)at _ZoneDelegate.invoke(zone.js:371:52)at Zone.run(zone.js:134:43)
我尝试过以下方法:

  • 将其转换为一个可观察值,并在观察者误差方法中处理误差
  • 将其转换为observable,并使用rxjs的catchError处理错误
  • 使用传统的try-catch(当然也使用await)

所有这些方法都以上面提到的相同结果结束(代码在catch块中运行,然后出现未捕获的异常)。
旁注:我在SO(zone.js promises returning Unhandled Promise Rejection error even with catch blocks)和Github(https://github.com/angular/angular/issues/31680)上也发现了类似的问题,它描述了相同的错误,并且在Github问题中提到了PR,但不幸的是没有解决问题。我已经尝试了zoneJS标志,但PR唯一的区别是错误现在被解开了。

3wabscal

3wabscal1#

在你的catch块中,你会收到一个异常对象,它可以被处理和采取行动,在这种情况下,我已经构建和枚举来解释屏幕上的错误:

.catch(error =>{
      this.material.toast(Errors[error.code], 3000, 'red full');
      if(error.code === 'auth/user-not-found')  this.router.navigateByUrl('login/register');
    })

字符串

相关问题