模板请求...
if (this.userRequesting._id === Meteor.user()._id) { ... }
...检查一个人的身份。 (我怀疑这不是处理这个问题的最佳方法,但我会将其保留到另一个问题,以免使这个问题重载)。
我的问题是,这会导致巨大的错误级联,表明 Meteor.user()
未定义,仅在页面加载时...页面加载后,这段代码执行没有问题。显然,存在一个计时漏洞(或者我认为是这样),其中 Meteor.user()
在页面加载时瞬间保持未分配状态。将上面的代码替换为...
____________
if (Meteor.user() && this.userRequesting._id == Meteor.user()._id) { ... }
...解决了问题,但是...来吧...这不可能是犹太洁食。我对模板和 Meteor 做出了什么错误的假设?
如果相关的话,我正在使用accounts-password
作为我的作弊账户管理器。
[编辑]:这看起来像 same problem ,但我留下这个问题的前提是我正在寻找解决方案,而不是解决方法。 (我已经知道检查 Meteor.user()
可以解决这个问题。)
最佳答案
是的,你基本上已经猜对了。当您第一次刷新页面时,用户不会被视为已登录,并且必须验证是否已登录。但是模板内容会立即被调用,然后在加载其他内容时再次调用(如果您在 rendered
方法中放置 alert
,您会注意到这一点)。最好的解决方案正是您所建议的,尽管您可以使用 Meteor.userId()
来获取 id:
if (Meteor.userId() && Meteor.userId() === this.userRequesting._id) {
// ...
关于javascript - 如何防止 Meteor.user() 的计时漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478279/