【问题标题】:Inconsistent error format with Meteor Accounts.changePasswordMeteor Accounts.changePassword 的错误格式不一致
【发布时间】:2019-12-03 21:48:34
【问题描述】:

我正在使用 Meteor 1.8.1,在 Accounts.changePassword 返回的错误中发现了似乎不一致和未记录的行为。

docs 表示 Meteor 错误对象将包含一个“原因”参数。

但是如果由于用户未登录而尝试更改密码失败,则错误对象不包含“原因”或“错误”,只有“消息”,我在文档中找不到。

'message' 似乎总是被返回,尽管没有记录,但不一致的是它在密码错误的情况下包含错误代码 403,但在用户未登录的情况下不包含错误代码。

Accounts.changePassword(oldPassword, newPassword, (error) => {
    console.log('error.message', error.message);
    // not logged in provides message

    console.log('error.reason', error.reason);
    // incorrect password provides reason and message
    if (error) {
        const text = error.reason || error.message;
        console.log('error', text);
    }
       // success
});

所以我的问题是:

  • 我错过了什么吗?还是这种行为真的不一致且没有记录?
  • 有没有一种简单的方法可以在这两种情况下获得一致的错误消息?
  • 是否还有其他“陷阱”我应该测试 Meteor 再次以不同格式返回错误的位置?

非常感谢您的启发。

【问题讨论】:

    标签: meteor error-handling meteor-accounts


    【解决方案1】:

    根据文档,changePassword 方法仅在客户端上运行,因此您可以在尝试更改密码之前检查用户是否已登录

    if (!Meteor.user()) {
        return reportError(new Error("Must be logged in to change password."), callback);
    }
    

    【讨论】:

    • 我可以这样做,但它似乎并没有比我上面发布的“包罗万象”代码获得任何好处,而且它没有回答关于不一致错误消息的问题?
    【解决方案2】:

    根据docsAccounts.changePassword的描述是:

    更改当前用户的密码。 必须登录

    因此,当您尝试在没有用户登录的情况下调用它时,响应未定义或不一致是合理的。是的,Meteor.Error 对象的文档指定了 reason 属性,但 Meteor.Errors 仅在方法想要返回描述性错误时抛出,而不是在非法调用方法时抛出。

    您的用户界面代码应确保除非用户登录,否则永远不会显示更改密码表单。如果您的更改密码表单只显示给登录用户,那么您无需担心捕获这些未定义的错误。

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      相关资源
      最近更新 更多