2013-08-28 52 views
1

模板的请求......如何防止Meteor.user()的计时漏洞?

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

...检查一个人的身份。 (我怀疑这不是处理这个问题的最佳方法,但我会将其另存为另一个问题以免重复此问题)。

我的问题是,这会导致一个巨大的错误级联提示Meteor.user()未定义,在页面加载...一旦加载页面时,该代码执行没有问题。显然,有一个定时漏洞(或者我相信),其中Meteor.user()在页面加载时保持未分配状态。与更换上面的代码...

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

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

如果相关,我使用accounts-password作为我的作弊帐户经理。


[编辑]:这看起来像same problem,但我要离开这个问题问个明白我正在寻找一个解决方法,而不是解决办法的前提。 (我已经知道检查Meteor.user()解决这个问题。)

+0

你做了什么是修复不是一个解决方法。您必须了解被动上下文和订阅加载。 – gabrielhpugliese

+0

这就是你如何做到的。 'Meteor.user()'可以为空,所以你需要先检查它。直到elvis运算符'?。找到通向Javascript的途径之前,这样的构造就不存在了。 –

回答

1

是的,你基本上它是正确的。当你第一次刷新页面时,用户不会被认为是登录的,它必须验证它是。但是模板内容会立即被调用,然后当其他内容被加载时(如果您将alert放入rendered方法中,您会注意到这一点)。最好的解决办法是完全你的建议,虽然可以使用Meteor.userId()得到公正的ID:

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

听起来不错,但有点令人失望Meteor没有办法处理这个问题。 感谢您的提示! – j6m8

0

您可以使用Meteor.userId()来获得用户或null(我认为)已签署的_id属性,如果用户没有登录。