Meteor.user() 使用 angular ui-router 和 alanning:roles 刷新时未定义
Meteor.user() undefined when refreshing using angular ui-router and alanning:roles
我在使用 meteor angular 以及包 ui-router 和 alanning:roles 开发应用程序时遇到了问题。在一个组件中,我不希望某个特定的路由只对某些角色下的登录用户可用,所以我配置了一个具有以下功能的组件:
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,用户仍然不允许进入,但如果我去other url,那里唯一的requirement是要登录的,用户可以进入。我已经检查过,当我刷新页面时,Meteor.user() returns 未定义,所以我想这就是角色检查返回 false 的原因。我已经检查了这个社区中提出的几种解决方案,但我无法使它们中的任何一个发挥作用。你能帮我一下吗?
非常感谢。
这是一个时间问题,加载用户记录需要一些时间,并且路由在完成之前触发。
看看这个答案,它显示了我用来确保在路由解析之前完全加载用户记录的方法。
为了以后的人细读,我找到了另一种方法,这个方法附在angular-meteor包中:
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';
}
});
}
}
我使用了这个需要用户可用的函数,以及一个你可以传入以进行额外验证的额外函数。重要说明,在 angular-meteor 文档中,他们说这将在 1.4 中弃用,所以我仍然将以前的解决方案标记为好的解决方案。
此致,
我在使用 meteor angular 以及包 ui-router 和 alanning:roles 开发应用程序时遇到了问题。在一个组件中,我不希望某个特定的路由只对某些角色下的登录用户可用,所以我配置了一个具有以下功能的组件:
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,用户仍然不允许进入,但如果我去other url,那里唯一的requirement是要登录的,用户可以进入。我已经检查过,当我刷新页面时,Meteor.user() returns 未定义,所以我想这就是角色检查返回 false 的原因。我已经检查了这个社区中提出的几种解决方案,但我无法使它们中的任何一个发挥作用。你能帮我一下吗?
非常感谢。
这是一个时间问题,加载用户记录需要一些时间,并且路由在完成之前触发。
看看这个答案,它显示了我用来确保在路由解析之前完全加载用户记录的方法。
为了以后的人细读,我找到了另一种方法,这个方法附在angular-meteor包中:
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';
}
});
}
}
我使用了这个需要用户可用的函数,以及一个你可以传入以进行额外验证的额外函数。重要说明,在 angular-meteor 文档中,他们说这将在 1.4 中弃用,所以我仍然将以前的解决方案标记为好的解决方案。
此致,