2015-07-19 75 views
0

我有這個onBeforeAction掛鉤中,我檢查用戶沒有登錄或沒有在一個特定的角色(在這種情況下僱主角色),然後我重定向到一個特定的頁面(稱爲驗證)。我在導航功能也不錯,以該網頁,但是當我已經在頁面上,點擊刷新好像他通過IF條件和Router.go("verification");METEOR鐵路由器重定向,當它不應該

繼續代碼:

Router.route("/employer/profile", { 
    name:"employerProfile", 
    template:"employerProfile", 
    layoutTemplate:'employerLayout', 

    onBeforeAction:function(){ 

     var user = Meteor.userId(); 
     if(!user || !Roles.userIsInRole(user, ['employer'])) { // checking if the user satisfies this condition e.g. if its a "GUEST USER" than he can't access this route 
       Router.go("verification"); 
     } 
     else { 
      this.next(); 
     } 
     return true; 

    }, 


}); 

這裏是一個快速視頻演示展示發生了什麼:

http://screencast.com/t/BEgwpXwqvwt

任何人有一個想法?

回答

1

它看起來像在頁面刷新流星訂閱角色集合,但尚未下載任何數據,所以userIsInRole返回false。

我認爲你需要等到角色訂閱準備就緒(並且它不是最好的選擇),或者稍後重定向到驗證頁面時,訂閱就準備好了。我建議使用服務器方法進行此檢查。將您的驗證代碼移到服務器方法中並使用它:Meteor.call('verifyUser',function(error,result){if(result === false)Router.go(「verification」);});

+0

我認爲這可能是一個「處理」問題或代碼執行順序,因爲有時一切正常,有時會發生這種異常。你有建議如何實施這項檢查? – klanc

+0

將您的驗證代碼移到服務器方法中使用它:Meteor.call('verifyUser',function(error,result){if(result === false)Router.go(「verification」);}); – Rem

+0

非常感謝! :) – klanc