Meteor.user()在路由器内返回undefined

时间:2014-03-06 13:01:49

标签: meteor

我在Meteor中有以下设置:

当用户点击根URL并且未登录时,我会显示欢迎页面。

当用户点击根URL并登录IS时,我想重定向到用户的“事物”页面。

问题是,Meteor.user()在路由器中是未定义的。

这种结构的正确方法是什么?

<body>
    {{# if currentUser}}
        {{> thing}}
    {{else}}
        {{> welcome}}
    {{/if}}
</body>

var MyRouter = Backbone.Router.extend({
    routes: {
       "": "welcome",
       "/things/:thingId": "thing"
    },
    welcome: function() {
        var user = Meteor.user();
        console.log(user); //undefined
        // Redirect to user's thing
    },
    thing: function(thingId) {
        Session.set("currentThingId", thingId);
    }
});

1 个答案:

答案 0 :(得分:0)

您确定您当前的用户已经注册了吗?对Meteor.user()的调用在双方(客户端和服务器)都可用,因此您应该可以访问路由器文件中的当前用户实例。例如,我测试当前用户是否在我的路由器中登录,如下所示:

var requireLogin = function() { 
    if (! Meteor.user()) {
        if (Meteor.loggingIn())
            this.render(this.loadingTemplate);
        else
            this.render('accessDenied');
            this.stop();
        }
 }

Router.before(requireLogin, {only: 'postSubmit'})

检查mongo db中的服务器端:

$ meteor mongo
$ >db.users.find().count() // Should be greather than 0

在客户端控制。例如,打开一个chrome控制台,只需输入:

Meteor.user();
null // Means user is currently not logged in 
     // otherwise you should receive a JSON object