为啥 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 不同?的主要内容,如果未能解决你的问题,请参考以下文章

Meteor Session 和浏览器刷新

React/Apollo - 不同组件中的类似查询?

从 node.js 服务器下载文件

MeteorJS 表单提交正在刷新启用了 event.preventDefault() 的页面

为啥 SQL Server GEOGRAPHY 允许 -15069° 和 +15069° 之间的经度?为啥是±15069°?

为啥 int 存在于 C 中,为啥不只是 short 和 long