2016-11-06 50 views
0

当使用meteor,angular以及软件包ui-router和alanning:roles开发应用程序时,我遇到了一个问题。一个组件内,我wan't一个特定的路线是只为记录下某些角色的用户可用的,所以我配置组件具有以下功能:Meteor.user()在使用角度UI路由器和alanning刷新时未定义:角色

function config($stateProvider) { 
    'ngInject'; 

    $stateProvider.state('customers', { 
     url: '/customers', 
     template: '<customer-list></customer-list>', 
     resolve: { 
      currentUser($q) { 
        const userId = Meteor.userId(); 
        if (userId && Roles.userIsInRole(userId, ['admin'])) { 
         console.log('customers.USER_REJECTED'); 
         return $q.reject('AUTH_REQUIRED'); 
        } else { 
         console.log('customers.USER_ALLOWED'); 
         return $q.resolve(); 
        } 
       } 
      } 
     }) 
    } 

它可以很好地,但是当我刷新页面,在这种情况下,用户遵循我实施的逻辑,即使他实际登录,也不被允许访问路由。如果然后我手动去/ customers,用户仍然不被允许进入,但是如果我转到其他唯一要求登录的网址,允许用户进入。我检查过,当我刷新页面时,Meteor.user()返回未定义的,所以我想这就是为什么检查角色返回false。我已经检查了这个社区提出的几个解决方案,但是我不能让他们做任何工作。你能帮我一下吗?

非常感谢。

回答

0

只是为了将来人们的审阅,我发现了另一种方式来做到这一点,这一个连接到角流星包:

resolve: { 
     currentUser($meteor) { 
      return $meteor.requireValidUser(function(user) { 
       if (Roles.userIsInRole(user, ['admin'])) { 
        console.log('organisations.USER_ALLOWED'); 
        return true; 
       } else { 
        console.log('organisations.USER_REJECTED'); 
        return 'AUTH_REQUIRED'; 
       } 
      }); 
     } 
    } 

我用这个功能,需要一个用户可用并且还有一个额外的功能,您可以通过它来进行额外的验证。重要的一点是,在角流星文档中,他们表示这将在1.4中被弃用,所以我仍然将以前的解决方案标记为好的解决方案。

此致敬礼,