2017-11-25 14 views
1

내 애플리케이션 세 개를 세 개의 개별 탭에서 열고 사용자가 한 탭에서 로그 아웃하고 같은 탭에서 다른 자격 증명으로 로그인 한 다음 두 개의 다른 탭 중 하나를 사용하여 검색을 시작합니다 , 어떻게 그 두 탭에서 사용자를 로그 아웃 할 수 있습니까?모든 활성 탭에서 사용자 로그 아웃

내 프런트 엔드 기술은 AngularJS이고, API는 Web API로 작성되었으며 인증을 위해 토큰을 사용하고 토큰은 세션 쿠키 내에 저장됩니다. 사용자가 로그 아웃을 클릭하면

+0

[SO] (https://stackoverflow.com/questions/13513874/logout-all-open-tabs-automatically-when-user-logs-out-in-one-of-them) 문제. –

+0

@JeroenHeier 로컬 저장소를 사용하지 않습니다. 토큰이 쿠키에 저장됩니다. – Rachmaninoff

+0

@ JeroenHeier 사용자가 로그인 할 때 localstorage에서 가능하지 않은 사용자도 로그 아웃하려고합니다. 따라서 사용자가 로그인해도 sessionStorage가 적합하지 않습니다. , 탭에서 나는 그를 다른 탭에도 로그인시키고 싶다. – Rachmaninoff

답변

-2

다음 스크립트는 자동으로 모든 탭에서 세션을 파괴

<?php 

if (isset($_POST['submit'])) { 
session_start(); 
session_unset(); 
session_destroy(); 
header("Location: ../index.php"); 
exit(); 
} 

작동합니다. 한 탭에서 다른 자격 증명을 사용하여 사용자 로그인을하면 다른 자격 증명이있는 페이지가 계속 남아 있기 때문에 다른 페이지에서 동일한 페이지에 계속 액세스 할 수 있습니다.

+0

내 로그인은 쿠키 안에 저장되는 토큰으로 처리됩니다. 쿠키는 REST이고 백엔드는 웹 API – Rachmaninoff

0

사용자가 한 탭에서 로그 아웃하면 토큰을 사용 중지/파괴하기 위해 서버에 요청을 보낼 수 있습니다.

토큰이 유효한지 웹 API에서 확인할 수 있습니다. 권한이없는 상태 코드를 반환 할 수없는 경우 확인할 수 있습니다.

if (!IsValidToken()) 
    return Request.CreateResponse(HttpStatusCode.Unauthorized,ErrorMessage); 

및 서버에서 허가받지 않은 상태를 수신 할 때 인터셉터를 사용하여 로그인 페이지로 사용자를 리디렉션하십시오.

.factory('myInterceptor', ['$q', '$location', '$injector', function ($q, $location, $injector) { 
    return { 
     response: function (response) { 
      return response || $q.when(response); 
     }, 
     responseError: function (rejection) { 
      if (rejection.status === 401) { 
       var stateService = $injector.get('$state'); 
       stateService.go('login'); 
      } 
      return $q.reject(rejection); 
     } 
    } 
}]) 
.config(['$httpProvider', function ($httpProvider) { 
    $httpProvider.interceptors.push('myInterceptor'); 
}]); 

이 방법으로 사용자는 다른 탭에서 추가 요청을 할 경우에만 로그인하도록 리디렉션됩니다. 요청을하지 않고 리디렉션되도록하려면 $ interval을 사용하여 몇 초마다 토큰의 유효성을 검사 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 가능한 한'$ interval '을 사용하지 않으려 고합니다. 나는 좀 더 결정 론적 접근법을 좋아한다. – Rachmaninoff