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

时间:2013-08-28 02:02:33

标签: javascript meteor

模板请求......

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

...检查一个人的身份。 (我怀疑这不是解决这个问题的最佳方法,但我会将其保存为另一个问题,以免超载这个问题。)

我的问题是,这导致了一个巨大的错误级联,表明Meteor.user()未定义,页面加载...一旦页面加载,此代码执行没有问题。很明显,有一个计时漏洞(或者我相信),其中Meteor.user()在页面加载时保持未分配状态。用......替换上面的代码。

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

...修复了问题,但是......来 on ...那不可能是犹太教徒。我错误地对模板和流星做出了什么假设?

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


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

2 个答案:

答案 0 :(得分:1)

是的,你基本上做对了。首次刷新页面时,不会考虑用户登录,而是必须验证用户是否已登录。但是模板的东西会被立即调用,然后在加载其他东西时再次调用(如果你在alert方法中放置rendered,你会注意到这一点)。最好的解决方案正是您的建议,尽管您可以使用Meteor.userId()来获取ID:

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

答案 1 :(得分:0)

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