2016-11-06 1 views
0

meteor, angular 및 패키지 ui-router 및 alanning : 역할을 사용하여 앱을 개발할 때 문제가 발생했습니다. 구성 요소의 내부에서, 나는 특정 역할에서 로그인 한 사용자에 사용할 수있는 특정 경로를 wan't, 그래서 나는 다음과 같은 기능과 구성 요소를 구성합니다각도 ui-router 및 alanning : 역할을 사용하여 새로 고칠 때 Meteor.user()가 정의되지 않았습니다.

그것은 잘 작동
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로 이동하면 사용자는 여전히 입력 할 수 없지만 유일한 요구 사항이 로그인되어있는 다른 URL로 이동하면 사용자가 입력 할 수 있습니다. 나는 페이지를 새로 고침 할 때 Meteor.user()가 undefined를 반환했는지 확인 했으므로 역할 검사가 false를 반환하는 이유가 여기에 있다고 가정합니다. 이 커뮤니티에서 제안 된 몇 가지 솔루션을 확인했지만 그 중 어떤 것도 만들 수 없습니다. 나 한테 손을 줘 줄래?

감사합니다.

답변

1

타이밍 문제로, 사용자 레코드가로드되는 데 시간이 걸리며 완료되기 전에 경로가 시작됩니다.

이 대답을 살펴보면 경로가 해결되기 전에 사용자 레코드가 완전히로드되었는지 확인하는 방법이 나와 있습니다.

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'; 
       } 
      }); 
     } 
    } 

나는이 기능을 사용했습니다에 사용자가 필요합니다 :

Meteor - Call function before state loaded using ui-router

+0

감사합니다. – vantesllar

0

그냥 미래 사람들의 열람, 나는 그것을 할 수있는 또 다른 방법, 각-유성 패키지에 부착이 하나를 발견 추가 유효성 확인을 위해 전달할 수있는 추가 기능을 사용할 수 있습니다. 중요 유념, 각형 유성 문서에서, 그들은 이것이 1.4에서 더 이상 사용되지 않을 것이라고 말합니다, 그래서 저는 여전히 이전의 해결책을 좋은 것으로 표시했습니다.

감사합니다.

관련 문제