2017-01-31 3 views
3

My Aurelia 프로젝트는 자체 루트 구조로 두 개의 앱 루트에서 분할됩니다. 응용 프로그램 루트 1에는 인증 할 필요가없는 모든 화면 (로그인, 재설정 pwd, ...)이 있습니다. 응용 프로그램 루트 2는 다른 모든 화면입니다.다른 앱 루트의 라우터 권한 부여 단계가 트리거링을 유지합니다

authorizeStep으로 인증되지 않은 경우 루트 루트 2에 대한 액세스를 차단합니다. 이 단계에서는 인증되지 않은 경우 루트를 app root 1로 설정합니다. 앱 루트 1은 기본 경로로 로그인보기가 있으므로 매우 잘 작동합니다. 당신이 인증되고 응용 프로그램 루트 2에 깊은 URL로 이동하려고하지 않을 때 그래서, 이런 일이 발생 :

  1. 응용 프로그램 루트 2는 루트의 구성 및
  2. authorizeStep 트리거 깊은 URL로 이동하려고합니다, 당신은, 인증되지 않은 경로가 취소하고 aurelia.setRoot는() 문제는 1
  3. 응용 프로그램 루트 1은 라우터의 기본 경로에 당신을 탐색 구성, 로그인 페이지

응용 프로그램 루트에 발생 수동으로 로그 아웃합니다. 앱 루트 2에있는이 버튼을 클릭하면 따라서 사용자 데이터가 삭제되므로 더 이상 인증되지 않습니다. 로그인 페이지

  • authorizeStep

    1. 응용 프로그램 루트 1은 라우터의 기본 경로에 당신을 탐색 구성 : 해당 단계에 따라, 나는 수동으로 내가 무한 루프를 얻을이 응용 프로그램 루트 1 루트를 설정하고, 앱 루트 2에서 트리거 !, 인증되지 않았으며 경로가 취소되고 aurelia.setRoot()가 앱 루트 1에 발생합니다.
    2. 앱 루트 1은 라우터를 구성하고 기본 경로 인 로그인 페이지로 이동합니다.
    3. ...

    문제는 루트 2의 authorizeStep이 루트 1에서 탐색 할 때 트리거된다는 것입니다. 나는 authorizestep을 제거하는 방법을 찾았지만 프레임 워크가 현재 이것을 공개하지 않는다고 생각합니다. 이 문제는 로그 아웃을 클릭하고 딥 링크 및 로그인으로 리디렉션하는 것이 예상대로 작동 할 때만 발생한다는 점이 매우 궁금합니다.

    명확성을 위해 재생성 요령을 만들었습니다. 로그 아웃 버튼을 클릭하면 콘솔이 무한대로 반복되는 것을 볼 수 있습니다.

    https://gist.run/?id=1a551dcc4bec7d191ab680a937b19cfc

  • 답변

    0

    이는 aurelia.setRoot()가 내부적으로 호출하는 router.clear()에서 수행되지 않습니다, 당신은 단계를 직접 삭제해야 밝혀졌습니다.

    다행히 당신은 실제로 함께이 직접 수행 할 수 있습니다 this.pipelineProvider.reset();

    나는 논리적하지만이 동작을 찾을 수없는, 그래서 그것에 대한 문제 생성 : https://github.com/aurelia/router/issues/465