Lap*_*son 7 javascript firebase typescript firebase-authentication
我正在尝试在我们的服务器上使用 TypeScript 实现 Firebase 身份验证和用户创建。
我正在创建一个新用户,并将整个创建内容包装在一个 try-catch 块中。我试图捕获几个异常,其中之一是 Firebase 引发的异常。
问题是我无法检查异常是否是由 Firebase 引发的,或者是否是另一种类型的异常。
类似问题的其他答案建议检查异常是否是 FirebaseError 的实例:
let firebaseUser;
try {
firebaseUser = await firebase.auth().createUser({
email: email,
password: password,
});
// Other code here
} catch (error) {
if(error instanceof FirebaseError){
// handle FirebaseError here
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当 createUser 函数中出现错误时,错误是 FirebaseAuthError 的实例,而不是 FirebaseError,因此此检查失败。
我尝试将其切换到 FirebaseAuthError 并导入 FirebaseAuthError,但收到一条错误消息:
包子路径“./lib/utils/error”未由 \node_modules\firebase-admin\package.json 中的“exports”定义
那么检查 FirebaseAuth 是否抛出捕获的异常的正确方法是什么?
我认为你能做的最好的事情就是编写一个类型保护,以确保你的错误是一个 FirebaseAuthError ,你将使用 import type 导入它。我查了一下,好像是因为库没有导出。
您可以自由地受益于 firebase 使用的类型,但是,由于该模块未在导出中列出,因此您将无法在运行时使用它。该import type语法允许您在开发期间仍然使用它,但在构建时它将被完全忽略。这意味着您不能使用,instanceof FirebaseAuthError因为仅导入类型,并且不能instanceof在类以外的其他内容上使用。
我不确定以下语句,但我猜想以 为前缀的每个错误auth/似乎都是 FirebaseAuthError。
因此,您可以编写一个类型保护,如下所示:
import type { FirebaseAuthError } from 'firebase-admin/lib/utils/error';
function isFirebaseAuthError(error: FirebaseError): error is FirebaseAuthError {
return error.code.startsWith('auth/');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |