JavaScript 中处理 Firebase 身份验证错误的有效方法
Efficient way to handle Firebase Authentication error in JavaScript
我目前在 JavaScript 中使用 Firebase 身份验证并尝试创建一个函数来注册用户。我需要检查的第一步是电子邮件使用的可用性。是否使用 getUserByEmail()
函数。如果电子邮件尚未使用,请继续注册步骤,否则,return 包含错误状态和错误消息的对象。
事实是,getUserByEmail()
函数是 return 一个 Promise。因此,如果提供的电子邮件尚未注册,该函数将 return 出错。这是可以理解的,因为该功能是基于 Promise 的。但令我困扰的是语法顺序,因为它是“颠倒的”,因为从我通常做的是 try
块是执行“正确的步骤”而 catch
块是执行“错误的步骤” ”。这是我写的代码:
try {
const findFirebaseUser = await admin.auth().getUserByEmail(email);
return {
status: false,
message: 'Email has been used'
}
} catch (error) {
if (error.errorInfo.code === 'auth/user-not-found') {
// register step
const { uid } = await admin.auth().createUser({
displayName: name,
password,
email,
phoneNumber
});
await admin.auth().setCustomUserClaims(uid, { role });
return {
status: true,
message: 'Success'
}
}
}
有什么方法可以更有效地编写步骤?谢谢。
如果上面的样式让你感到困扰,只需将代码重构为如下所示:
const exists = await isUserExists(email);
if (exists) {
return { status: false, message: 'already exists' };
}
// Create and set claims
async function isUserExists(email) {
try {
await admin.auth().getUserByEmail(email);
return true;
} catch (err) {
return false;
}
}
我目前在 JavaScript 中使用 Firebase 身份验证并尝试创建一个函数来注册用户。我需要检查的第一步是电子邮件使用的可用性。是否使用 getUserByEmail()
函数。如果电子邮件尚未使用,请继续注册步骤,否则,return 包含错误状态和错误消息的对象。
事实是,getUserByEmail()
函数是 return 一个 Promise。因此,如果提供的电子邮件尚未注册,该函数将 return 出错。这是可以理解的,因为该功能是基于 Promise 的。但令我困扰的是语法顺序,因为它是“颠倒的”,因为从我通常做的是 try
块是执行“正确的步骤”而 catch
块是执行“错误的步骤” ”。这是我写的代码:
try {
const findFirebaseUser = await admin.auth().getUserByEmail(email);
return {
status: false,
message: 'Email has been used'
}
} catch (error) {
if (error.errorInfo.code === 'auth/user-not-found') {
// register step
const { uid } = await admin.auth().createUser({
displayName: name,
password,
email,
phoneNumber
});
await admin.auth().setCustomUserClaims(uid, { role });
return {
status: true,
message: 'Success'
}
}
}
有什么方法可以更有效地编写步骤?谢谢。
如果上面的样式让你感到困扰,只需将代码重构为如下所示:
const exists = await isUserExists(email);
if (exists) {
return { status: false, message: 'already exists' };
}
// Create and set claims
async function isUserExists(email) {
try {
await admin.auth().getUserByEmail(email);
return true;
} catch (err) {
return false;
}
}