繁体   English   中英

如何防止Meteor.user()的计时漏洞?

[英]How can I prevent Meteor.user()'s timing hole?

模板要求...

if (this.userRequesting._id === Meteor.user()._id) { ... }

...检查一个人的身份。 (我怀疑这不是处理此问题的最佳方法,但我会将其保存在另一个问题中,以免使该问题不致过多)。

我的问题是,这导致了巨大的错误级联,提示Meteor.user()是未定义的, 在页面加载时才存在 。一旦页面被加载,此代码将执行而不会出现问题。 显然,有一个计时漏洞(或者我认为是这样),在此时间内Meteor.user()在页面加载时Meteor.user()仍未分配。 将上面的代码替换为...

    ____________
if (Meteor.user() && this.userRequesting._id == Meteor.user()._id) { ... }

...可以解决问题,但是...... 加油 ......这不可能是犹太教。 关于模板和流星,我错误地做出了什么假设?

如果相关,我将使用accounts-password作为我的骗子客户经理。


[编辑]:这看起来像是同样的问题 ,但是我在寻找解决方案而不是解决方法的前提下放弃了这个问题。 (我已经知道检查Meteor.user()可以解决此问题。)

是的,您基本上是正确的。 首次刷新页面时,不认为该用户已登录,因此必须验证该用户。 但是会立即调用模板内容,然后在加载其他内容时再次调用(如果将alert放入rendered方法中,则会注意到这一点)。 最好的解决方案正是您的建议,尽管您可以使用Meteor.userId()来获取ID:

if (Meteor.userId() && Meteor.userId() === this.userRequesting._id) {
    // ...

您可以使用Meteor.userId()来获取已登录用户的_id属性,如果未登录,则为null (我认为)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM