Firebase JS SDK v10如何获取不带auth/前缀的AuthErrorCode
解决Firebase JS SDK v10重置密码接口的错误捕获问题
你当前的问题核心是错误地使用了error.message来匹配AuthErrorCodes,正确的做法应该是利用FirebaseError的code属性进行判断,这才是SDK定义的标准错误标识。
错误原因分析
AuthErrorCodes中定义的常量(比如AuthErrorCodes.INVALID_EMAIL对应"auth/invalid-email")是Firebase SDK抛出的FirebaseError对象的code属性值,而非message属性。你代码里拿error.message(值为"INVALID_EMAIL")去和AuthErrorCodes.INVALID_EMAIL比较,自然匹配不上。
另外需要注意:输入未注册邮箱时,SDK抛出的错误码应该是AuthErrorCodes.USER_NOT_FOUND(对应"auth/user-not-found"),而非INVALID_EMAIL——你看到的HTTP响应里的"INVALID_EMAIL"是底层接口的返回文本,SDK会将其封装为标准的FirebaseError对象,所以不要直接依赖HTTP响应的字段做判断。
修正后的代码示例
public resetPassword(email: string, actionCodeSettings: ActionCodeSettings): Promise<void> { return sendPasswordResetEmail(this.auth, email, actionCodeSettings); } public async handleResetPassword(): Promise<void> { try { await this.resetPassword(this.email, this.actionCodeSettings); } catch (error) { // 先判断是否为FirebaseError类型 if (error instanceof FirebaseError) { // 用error.code匹配AuthErrorCodes常量 if (error.code === AuthErrorCodes.INVALID_EMAIL) { // 处理无效邮箱格式的逻辑 } else if (error.code === AuthErrorCodes.USER_NOT_FOUND) { // 处理邮箱未注册的逻辑 } // 可继续添加其他错误码的判断 } } } }
关键注意事项
- 永远用
FirebaseError.code做错误逻辑判断,message是面向用户的提示文本,可能会有本地化或格式变化,不适合作为判断依据。 AuthErrorCodes中的所有常量都是SDK公开的标准错误码,覆盖了所有认证场景的错误类型,直接使用即可,无需自行拼接或处理前缀问题。
内容的提问来源于stack exchange,提问作者DarkMikey
相关产品推荐
相关产品推荐

