2017-02-08 7 views
1

내부에 보호 된 일부 페이지로 앱을 만들고 있습니다.이 페이지는 등록 된 사용자 만 액세스 할 수 있습니다. 시간 초과 또는 변경 브라우저 탭 후에 세션을 확인해야합니다. 사용자가 이미 다른 탭이나 세션이 만료 된 경우 앱에서 사용자를 로그인 페이지로 리디렉션해야합니다.현재 경로 보호자를 얻는 방법

페이지를 보호하기 위해 경비원을 사용하고 있으므로 현재 경로를 가드가 확인하는 올바른 방법이라고 생각합니다. 사용자 세션이 만료/폐쇄되고 현재 경로가 특정 가드를 사용하는 경우 페이지가 리디렉션되어야합니다.

아무도 현재 경로의 경호원을 도울 수 있습니까?

라우터 및 ActivatedRoute에 대한 문서를 확인했는데 그 정보를 찾지 못했습니다.

+0

[Authorized vs unauthorized main view] 가능한 복제본 (http://stackoverflow.com/questions/41570937/authorized-vs-unauthorized-main-view) –

+0

이 게시물 확인 : http://stackoverflow.com/questions/41570937/authorized-vs-unauthorized-main-view/41571878 # 41571878 사용자가 등록되었는지 여부를 확인하는 서비스를 설정하고이 서비스로 보안을 설정하면됩니다. –

+0

경비원을 사용하는 방법에 대한 지침이 있습니다. 나는 이미 그것을 사용합니다. 사용자가 이미 보호 된 페이지에 있고 GUI가 상호 작용하지 않고 세션이 활성화되어 있는지 확인해야합니다. app.component.ts에서이 작업을 수행하려고합니다. – avvensis

답변

0

나는 똑같은 문제에 직면 해있다. 필요성을 더 잘 이해할 수있는 시나리오가 있습니다. 일부 페이지가 보호되고 있고 일부는 보호되지 않은 웹 사이트가 있다고 가정 해보십시오. 가드는 적절한 페이지를 보호하는 데 사용됩니다. 이제 사용자가 보호 된 페이지에 있다고 가정하고 (프로필보기) '로그 아웃'버튼을 클릭하십시오. 어떻게해야합니까? 사용자는 홈페이지로 리디렉션되어야합니다. 그러나 사용자가 가드에 의해 보호되지 않는 페이지에 있다면 아무 일도 일어나지 않아야합니다. 당연히 리다이렉트가 일어날지라도 모든 signle 페이지에서 그것을 확인하는 것이 가능하다. 그러나 그것은 최선의 해결책이 아니다. 더 나은 해결책은 AuthService에서이 상황을 처리하는 것입니다. 여기서 로그 아웃은 실제적으로 발생하지만 누군가가 직전 경로가 경비로 보호되는지 여부를 알아야합니다.

0

나는 또한이 문제에 직면했다. 그래서 나는 약간의 연구와 바이올린을 만들어이 솔루션을 개발했습니다 :

AuthService가 https://angular.io/guide/router#canactivate-requiring-authentication과 같이 구현되었다고 가정합니다. AuthService에서

는 다음을 추가

Logout() { 
// (logout logic here) 
    var currentRouteConfig = this.router.config.find(f=>f.path == this.router.url.substr(1)); 
    if(currentRouteConfig != null && currentRouteConfig.CanActivate != null) { 
    this.redirectUrl = this.router.url; 
    this.router.navigate(['/login']) 
} 

SUBSTR (1) 단지 삭제 선두 '/'라우터 구성에서 경로가없이 그대로.

이것은 canActivate가 항상 인증 가드를 구현한다고 가정 할 때 순진한 구현이라는 점에 유의하십시오. 다른 논리에서는 인증 가드를 더 자세히 검사해야 할 수도 있습니다.