2014-03-06 86 views
2

內未定義回報我在流星以下設置:Meteor.user()路由器

當用戶點擊URL根和未登錄,我展示一個歡迎頁面。

當用戶點擊根URL並登錄時,我想重定向到用戶的「東西」頁面。

問題是,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); 
    } 
}); 

回答

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'}) 

檢查您蒙戈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 
+0

嗨,是的,用戶是絕對註冊並登錄(在Chrome控制檯中確認)。 –