我正在使用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
});
所以我的问题是:
非常感谢您的启发。
答案 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
仅在方法要返回描述性错误时抛出,而在非法调用方法时则不会抛出。 >
您的用户界面代码应确保除非用户登录,否则永远不会显示更改密码表单。如果只向登录用户显示更改密码表单,则您不必担心捕获这些未定义的用户错误。