2016-09-30 91 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