Meteor.user()在使用角度UI路由器和alanning刷新时未定义:角色
问题描述:
当使用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。我已经检查了这个社区提出的几个解决方案,但是我不能让他们做任何工作。你能帮我一下吗?
非常感谢。
答
这是一个计时问题,需要一些时间才能加载用户记录,并且在完成之前启动路由。
看看这个答案,它显示了一种方法,我用它来确保用户记录在路径解析之前完全加载。
答
只是为了将来人们的审阅,我发现了另一种方式来做到这一点,这一个连接到角流星包:
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中被弃用,所以我仍然将以前的解决方案标记为好的解决方案。
此致敬礼,
它的工作,非常感谢队友,非常感谢! – vantesllar