为啥 Meteor.user 和 Meteor.userId 不同?
Posted
技术标签:
【中文标题】为啥 Meteor.user 和 Meteor.userId 不同?【英文标题】:Why Meteor.user and Meteor.userId differ?为什么 Meteor.user 和 Meteor.userId 不同? 【发布时间】:2015-12-08 19:35:39 【问题描述】:我有一个拦截器:
Router.onBeforeAction(function()
if (!Meteor.userId())
console.log("lets login");
Router.go("login");
else
this.next();
,
except: ['login', 'signup']
);
它工作得很好,直到我用 Meteor.user() 替换了 !Meteor.userId()。刷新页面时似乎 .user 未定义并将其重定向到我的登录页面。我的登录路由器也验证了 .user,这里是对的。
为什么会有这种差异?
【问题讨论】:
查看我对this question的回复。 Meteor.userId() 返回当前用户 ID,Meteor.user() 返回整个对象 @Nakib 我知道,但这不是问题。我的 if !Meteor.user() 也验证对象,但刷新后它总是未定义。 @DavidWeldon 你的回答很有道理,但这是一个错误吗? 不。您只需要最先更新的反应变量,而登录 + 发布过程的机制使Meteor.user()
需要更长的时间才能获得正确的信息。
【参考方案1】:
没错,Meteor.userId() 返回 id 而 Meteor.user() 返回对象。
但是,由于异步问题,在脚本检查 if (! Meteor.user()) ...,Meteor.user() 尚未处理并返回!
因此,有几种方法可以解决该异步问题(例如,在 Meteor/React 应用程序中,我们可能有类似 subscribe 之类的东西,并等到 handle 准备好了)
【讨论】:
以上是关于为啥 Meteor.user 和 Meteor.userId 不同?的主要内容,如果未能解决你的问题,请参考以下文章
MeteorJS 表单提交正在刷新启用了 event.preventDefault() 的页面
为啥 SQL Server GEOGRAPHY 允许 -15069° 和 +15069° 之间的经度?为啥是±15069°?