【问题标题】:Firebase cloudfunction does not return error in promiseFirebase 云功能不会在承诺中返回错误
【发布时间】:2020-03-21 12:41:14
【问题描述】:

我试图在使用 Firebase Cloudfunctions 创建用户和使用 nodeJS 创建管理 SDK 时遇到错误。

创建用户时一切正常,因为创建的用户返回我,但创建错误时,我没有得到承诺的捕获中的错误。

所以在前端的捕获中永远不会收到任何东西,一切都收到它,就好像它是正确的

示例:我没有输入电子邮件来创建新用户,请求是状态 200,但答案是:

{"result":{"errorInfo":{"code":"auth/invalid-password","message":"密码必须是至少6个字符的字符串。"}," codePrefix":"auth"}}

这是我的函数代码:

exports.addNewUser = functions.https.onCall((data, context) => {
    return admin.auth().createUser({
      email: data.email,
      emailVerified: true,
      password: data.password,
      displayName: data.name,
      disabled: false
    }).then(userRecord => {
        console.log('Successfully created new user:', userRecord.uid);
        return userRecord;
      })
      .catch( error => {
        console.log('Error creating new user:', error);
        return error;
      });
  });

这在创建用户时可以正常工作,但如果错误存在,则不会返回给我。

我所做的不是返回错误,而是只返回一个字符串,如果它正确返回。

【问题讨论】:

  • 我认为您在数据库中创建了一些关于密码的规则...
  • 完全没有朋友,只有管理员创建新用户的规则

标签: node.js firebase firebase-authentication google-cloud-functions


【解决方案1】:

这是因为要处理 Callable Cloud Function 中的错误,您需要抛出 functions.https.HttpsError,如 documentation 中所述。

所以以下将起作用:

exports.addNewUser = functions.https.onCall((data, context) => {
    return admin.auth().createUser({
        email: data.email,
        emailVerified: true,
        password: data.password,
        displayName: "dataname",
        disabled: false
    }).then(userRecord => {
        console.log('Successfully created new user:', userRecord.uid);
        return userRecord;
    })
    .catch(error => {
        console.log('Error creating new user:', error);
        throw new functions.https.HttpsError('invalid-argument', error.message);
    });
});

还要注意文档中关于如何处理客户端错误的section

【讨论】:

  • 正是我在尝试你所说的,但我只有错误 500 控制台,在网络选项卡的响应中我收到错误消息,但我还没有找到如何获得该消息,现在我试试你的代码。谢谢。
  • 酷。请注意,您需要在客户端中使用error.codeerror.message(请参阅答案中“如何处理客户端错误”的链接)
  • 感谢朋友,它运行良好。我已经在那条路上了,只是我用这样的 3 个参数来做: throw new functions.https.HttpsError("unknown", 'Something error', error);但它不起作用,我看到最好使用2个参数。非常感谢你救了我!
猜你喜欢
  • 2018-11-06
  • 1970-01-01
  • 2023-04-01
  • 2018-04-19
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
相关资源
最近更新 更多