【问题标题】:Meteor.user() undefined when refreshing using angular ui-router and alanning:roles使用角度 ui-router 和 alanning:roles 刷新时 Meteor.user() 未定义
【发布时间】:2017-03-19 18:20:01
【问题描述】:

我在使用流星、角度以及包 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();
                    }
                }
            }
        })
    }

它工作得很好,但是当我刷新页面时,如果用户按照我已经实现的逻辑,则不允许访问该路由,即使他实际上已登录。如果然后我手动转到 /客户,仍然不允许用户进入,但是如果我转到唯一要求登录的其他网址,则允许用户进入。我已经检查过,当我刷新页面时,Meteor.user() 返回 undefined,所以我想这就是检查角色返回 false 的原因。我已经检查了这个社区中提出的几个解决方案,但我无法使它们中的任何一个工作。你能帮我一把吗?

非常感谢。

【问题讨论】:

    标签: angularjs meteor angular-ui-router roles


    【解决方案1】:

    为了以后的人的阅读,我找到了另一种方法,这个方法附在 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 中被弃用,所以我仍然将以前的解决方案标记为好的解决方案。

    最好的问候,

    【讨论】:

      【解决方案2】:

      这是一个时间问题,加载用户记录需要一点时间,并且在完成之前触发路由。

      看看这个答案,它显示了我用来确保在路由解析之前完全加载用户记录的方法。

      Meteor - Call function before state loaded using ui-router

      【讨论】:

        猜你喜欢
        • 2018-02-23
        • 2017-08-24
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多