2016-09-30 86 views
0

如何從流星帳戶模塊的用戶集合中驗證特定字段?從解決方案訪問集合

假設下一個代碼:

$stateProvider.state('myState', { 
    resolve:{ 
    function($q) { 
     if(Meteor.userId()){ 
     return $q.resolve(); 
     } 

     else { 
     retrun $q.reject(); 
     } 
    } 
    } 
}) 

決心裏面是可以使用Meteor.userId()函數來檢索來自用戶的_id,但我不能使用Meteor.user()函數一樣的方法。我怎樣才能從集合中檢索自定義數據從決心

+0

爲什麼你不能用'流星。用戶()'在同樣的方式?這個函數不會返回整個'user'對象嗎? – lucasnadalutti

+0

是的,它應該,或者至少我猜它應該,但是......它沒有,可能與Angular加載數據的執行順序有關。 – 2JN

回答

0

這是一個有點棘手,但可以解決使用此代碼在您的狀態:

resolve: { 
    currentUser: ($q) => { 
     var deferred = $q.defer(); 

     Meteor.autorun(function() { 
      if (!Meteor.loggingIn()) { 
       if (Meteor.user() == null) { 
        deferred.reject('AUTH_REQUIRED'); 
       } else { 
        deferred.resolve(Meteor.user()); 
       } 
      } 
     }); 

     return deferred.promise; 
    } 
} 

這將確保路由沒有解決,直到流星.user()記錄被加載,並且如果未登錄,則拒絕該路由。我花了一段時間才能找到這一個,但它是一個門將現在:)

+0

感謝您的回答,我試圖將其實現到我的代碼中,但它不能解決問題,您能否檢查這個要點,看看我是否做錯了什麼? https://gist.github.com/2JN/31bbe6589c450b1df5eadc025d4da06e – 2JN

+0

我覺得你的助手是錯誤的: – Mikkel

+0

而不是usuario(),你應該有usuario: – Mikkel

0

從要點繼,下面的代碼是我的助手怎麼看

this.helpers({ 
    member:() => Members.findOne({mid: Meteor.userId()}), 
    currentUser:() => { 
     return Meteor.user(); 
    }, 
+0

是否有可能在課堂外訪問助手? – 2JN

+0

此外,我意識到我在做什麼錯誤,似乎解析裏面的函數必須是一個箭頭函數:( – 2JN