Loopbackjs 环回更新属性设置密码删除令牌?
我在方法中获得了一个名为“changePassword”的端点方法,该方法的http路径为“/:id/changePassword”,我通过id查找帐户并更新模型的password属性,但问题是密码确实会更改并得到更新,但访问令牌也会被无故删除 当前代码Loopbackjs 环回更新属性设置密码删除令牌?,loopbackjs,Loopbackjs,我在方法中获得了一个名为“changePassword”的端点方法,该方法的http路径为“/:id/changePassword”,我通过id查找帐户并更新模型的password属性,但问题是密码确实会更改并得到更新,但访问令牌也会被无故删除 当前代码 instance.hasPassword(data.oldPassword, function(err, isMatch) { if (isMatch) { instance.updateAttributes({'pas
instance.hasPassword(data.oldPassword, function(err, isMatch) {
if (isMatch) {
instance.updateAttributes({'password': data.password}, function(errUpdateAccount, updatedAccount) {
if (!errUpdateAccount) {
return cb(null, {
status: 200
});
} else {
return cb(errUpdateAccount);
}
});
}
});
是的,这是新的行为。如果更改了整个用户对象(user.update和friends),或者仅更改了密码,则所有用户访问令牌都将无效 : 出于安全原因,注销用户很重要。考虑这种情况 当有人入侵你在注册时使用的电子邮件时 环回供电的应用程序。找到后,登录应用程序并 将电子邮件更改为未被黑客攻击的其他电子邮件。没有 会话(访问令牌)无效时,攻击者将保持日志记录 进入您的帐户,您将无法将其注销 话虽如此,我同意这会减少用户体验 最优的我建议允许最终用户决定是否 是否要注销其他会话,请参阅 现在这个()还有一个未解决的问题,没有拉取请求。这方面没有干净的解决办法 如果您真的非常想找到解决方案,那么您可以使用monkey patch环回: 我看了一下代码,发现它调用了。由于我知道在项目中的任何其他地方都可以使用此函数,所以我猜您可以做一个有风险的操作来覆盖它,而不做任何事情:
app.models.User._invalidateAccessTokensOfUsers = (ids, cb) => process.nextTicke(cb);
这是我能想到的最好的解决问题的方法,直到他们解决这个bug()。请注意,您应该确保您的代码和依赖项也不会使用
\u invalidateAccessTokensOfUsers
,并且环回不会在其他地方开始使用它。请好好注释它,不要忘记删除它,并且要非常小心。非常感谢您的评论,并指出了导致问题的代码,令人敬畏的stuff man。请注意,新版本的LoopBack(/)在使令牌无效时保留了当前会话。这可能足以单独解决OP的问题。