2017-12-12 10 views
0

프로젝트 아키텍처는 다음과 같습니다. Angular + Firebase. Angular 컴포넌트는 서비스의 메소드를 호출하여 Firebase에서 데이터를 저장/검색합니다.사용자가 로그 아웃 한 후 각도가 변경된 서비스의 변수 재설정

동작 : 사용자가 로그인하여 일부 작업을 수행하고 (데이터 저장/검색) 로그 아웃합니다. 다른 사용자가 동일한/다른 탭에 있지만 동일한 브라우저 창에 로그인하면 일부 데이터가 저장됩니다. 데이터는 Firebase의 이전에 로그인 한 사용자의 위치에 저장됩니다.

그래서 예상 된 동작인지 확인하고 싶습니다.

서비스의 생성자에서, 나는 현재

constructor() { 
    this.user = firebase.auth().currentUser; 
    // some other code 
} 

를 기록 인출 할 수있는 코드를 작성했습니다하지만 그 응용 프로그램의 두 번째/연속 사용자 불러 결코 (처음/이전 사용자가 로그 아웃 한 후) .

새 사용자가 로그인 할 때 서비스 생성자가 다시 호출되는 것은 아닌지 확실하지 않지만 확인하고 싶습니다. 또는 일단 사용자가 로그 아웃하면 "service"변수는 null로 설정되어서는 안됩니다. firebase.auth(). currentUser는 현재 로그인하지 않았 으면 null을 반환하기 때문에 null로 설정해서는 안됩니다. 사용자 !

답변

0

서비스는 싱글 톤입니다. 즉, 응용 프로그램 수명주기 동안 인스턴스가 하나만 존재한다는 것을 의미합니다.

아니요, 두 번 호출되지 않습니다. 이것이 당신 문제입니다.

해결하기 위해 할 수있는 일은 생성자가 수행하는 기능을 만드는 것이며 사용자 로그인시이 함수를 호출하는 것입니다. 이렇게하면 사용자 데이터가 업데이트됩니다.

+0

감사합니다.이 시나리오를 처리 할 별도의 함수를 만들었습니다. –

0

당신이

에 의해 무슨 뜻 이죠 사용자가 로그인, 일부 활동 (데이터를 검색/저장) 및 로그 밖으로 않습니다.

? 로그 아웃 중에이 작업을 수행하지 않습니까?

signOut() { 
    this.user = null; 
    firebase.auth().signOut(); 
    } 

그렇다면 문제가되지 않습니다.

+0

감사합니다. firebase.auth()를 사용했습니다. signOut(); Auth 서비스에는 있지만 UserDetails 서비스에는 없습니다. –

+0

은 한 곳에 있어야하며 다른 모든 서비스/구성 요소를 요구해야합니다. – ishandutta2007

+0

그래, 내가 처리 할게. 제안에 감사드립니다! –