2014-12-03 5 views
0

내 AngularJS에 문제가있어 쉽게 해결할 수없는 것 같습니다. 서버에 대한 사용자 권한 부여에 두 가지 서비스를 사용하고 있습니다. 권한 부여는 액세스 토큰과 새로 고침 토큰의 두 가지 토큰을 기반으로합니다.각 주입 루프

이제 전체 인증 프로세스와 서버와의 통신을 담당하는 두 번째 서비스 (Api)를 처리하는 하나의 서비스 (Auth)가 있습니다.

인증이 작동하는 방식은 사용자가 자신의 액세스 토큰을 사용하여 데이터에 액세스하는 것입니다. 토큰을 사용하지 않으면 새로 고침 토큰을 제출하고 새 액세스 토큰을 다시 가져 오려고 시도합니다.

문제는 서버가 401으로 응답하고 토큰이 무효화되면 Auth.authenticate(); 백그라운드 (리디렉션 또는 기타 없음) 및 성공하면 새 액세스 토큰으로 계속 진행하십시오.

Auth 서비스가 Api 서비스를 사용하고 있으므로 안타깝게도 Auth 서비스를 다시 Api 서비스에 삽입 할 수 없습니다. 한 곳에서 원하는 작업을 수행 할 수있는 좋은 방법이 있습니까? (컨트롤러의 매 요청마다 재 인증을 요청하지 않아도됩니까?)

일부 건축 정보 :

Auth Service (injects Api Service) 
| ---- authorisation function (uses Api Service) 

Api Service 
| ---- Different functions to prepare data for request 
| ---- One function to send all requests 
| ---- One function to handle all rejected promisses which includes detection of 401 and should include "silent" re-authorisation (AuthService.authorisation) 

은 정말 너무 혼란 소리가 나던 바랍니다. 나는 인터셉터를 시험해 보았지만 그 결과는 주사기 루프와 동일합니다.

내 아키텍처를 변경하지 않고 유일한 생각은 현재로드 된대로 인증 서비스의 현재 활성 인스턴스를 가져올 수있는 방법이 있는지입니다. 그러나 그것에 대한 자세한 내용을 찾을 수 없습니다.

감사합니다.

답변

1

나는 나의 허가에도 불구하고 비슷한 문제가 있었다.

때로는 다시 설계하는 것이 최선의 해결책이지만,이 경우에는 설명하는 '순환'액세스를 원할 한 좋은 사용 사례가 있다고 생각합니다.

  1. 를 주입 $injector 당신의 API 서비스를 대신하여 인증 서비스로 :

    은 다음보십시오.

  2. 사용자 $injector.get('AuthService') 인스턴스화 된 인증 서비스를 가져옵니다.
+0

아름다운! 그게 내가 필요한거야. – Tom