流星Accounts.changePassword的错误格式不一致

时间:2019-11-22 14:39:36

标签: meteor error-handling meteor-accounts

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

docs说,“流星错误”对象将包含“ reason”参数。

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

尽管没有记录,但“消息”似乎总是返回,但不一致之处在于,如果密码不正确,则包含错误代码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
});

所以我的问题是:

  • 我错过了什么吗?还是这种行为确实前后矛盾且没有记载?
  • 在这两种情况下,有没有一种简单的方法来获得一致的错误消息?
  • 在流星再次以其他格式返回错误的地方,我是否应该测试其他“陷阱”?

非常感谢您的启发。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

根据docs,对Accounts.changePassword的描述为:

  

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

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

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