【问题标题】:Efficient way to handle Firebase Authentication error in JavaScript在 JavaScript 中处理 Firebase 身份验证错误的有效方法
【发布时间】:2020-12-07 08:23:02
【问题描述】:

我目前在 JavaScript 中使用 Firebase 身份验证,并尝试创建一个函数来注册用户。我需要检查的第一步是电子邮件使用的可用性。无论是否使用getUserByEmail() 函数。如果邮箱没有被使用,则继续注册步骤,否则,返回一个包含错误状态和错误信息的对象。

问题是,getUserByEmail() 函数正在返回一个 Promise。因此,如果提供的电子邮件尚未注册,该函数将返回错误。这是可以理解的,因为该函数是基于 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'
        }
    }
}

我有什么办法可以更有效地编写步骤吗?谢谢。

【问题讨论】:

    标签: javascript error-handling firebase-authentication firebase-admin


    【解决方案1】:

    如果上面的样式让你感到困扰,只需将代码重构为如下所示:

    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;
      }
    }
    

    【讨论】:

    • 我想把肯定的情况放在try块中,根据catch块中的错误信息来处理错误。但这更整洁。谢谢!
    猜你喜欢
    • 2021-07-11
    • 2016-06-12
    • 2021-12-04
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2017-06-18
    相关资源
    最近更新 更多