2014-04-14 2 views
0

AngularJS 응용 프로그램을 리팩토링하고 로그인 서비스를 도입하려고합니다. 현재 내 컨트롤러에는 login(), logout(), getCurrentUser()과 같은 메소드가 있는데, http 요청을하고 사용자 객체를 처리합니다. 여러 컨트롤러에서 getCurrentUser() 메서드를 호출해야하기 때문에 이러한 함수를 서비스로 옮기고 싶습니다. AngularJS에서 로그인 서비스 작성

angular.module('common.login', []). 
    factory('loginService', function ($http) { 

     return { 
      user: null, 
      error: null 
     }; 
    }); 

그래서 순간에 서비스가 아무것도되지 않습니다

나는 다음과 같은 서비스를 작성했습니다. 그러나 오류가 발생합니다 :

Uncaught Error: Circular dependency: loginService <- $http 

콜백 함수에서 $ http 종속성을 제거하면 서비스가 작동합니다. 왜 순환 의존성이 있는지 이해하는 데 어려움이 있습니다. loginService 팩토리는 두 개의 장소로 주입됩니다 : ** 메인 모듈의 설정 콜백 **과 ** 로그인 모듈의 컨트롤러 콜백 **. 구성 콜백은 http 인터셉터를 구성하고 로그인 컨트롤러는 http 서비스도 사용합니다.

+0

안녕 lanoxx. DI 문제를 이해하려면 컨트롤러의 서명을 게시하십시오. – blint

+0

나는이 기능을 서비스가 아닌 rootScope에서 수행하는 것이 좋습니다. – Mindstormy

답변

1

순환 의존성은 httpInterceptor를 구성하여 일부 인증 토큰을 보내거나 $ http 서비스에서 의존하는 로그인 서비스에 의존하는 401 오류를 가로 채기 때문에 발생합니다.

귀하의 httpInterceptor가 귀하의 로그인 서비스에 의존해서는 안됩니다. 예를 들어 토큰을 보내야하는 경우 로그인 할 때 localStorage에 저장 한 다음 httpInterceptor에서 loginService 대신 토큰을 읽을 수 있습니다. 401 오류가 발생했을 때 사용자를 로그 아웃해야하는 경우 loginService에서 로그 아웃 메소드를 호출하는 대신 사용자를/logout으로 리디렉션합니다.

관련 문제