Я использую Angular 7, Firebase ( Только для аутентификации ) и mysql ( Для сохранения других данных ).Как только пользователь вошел в систему, запрос получает данные пользователя из mysql и сохраняет их в localStorage.Когда я выхожу, происходит его выход, но опять-таки запрос (this.userService.findByUsername(res.user.uid).subscribe(....)
) отправляет и возвращает данные и сохраняет их в локальном хранилище.Отписываюсь при выходе.Но это не работает.(Немного других переменных и методов удалены в следующих кодах для упрощения)
export class AuthService {
private subscription: Subscription = new Subscription();
user: Observable<firebase.User>;
private currentUserSubject: BehaviorSubject<User | null>;
authState: any = null;
constructor(private firebaseAuth: AngularFireAuth, private router: Router, private userService:UserService) {
this.user = firebaseAuth.authState;
this.subscription.add(this.firebaseAuth.authState.subscribe((auth) => {
this.authState = auth;
//getting the user object if he already signed-in
this.currentUserSubject = new BehaviorSubject<User>(localStorage.getItem('currentUser') | null);
this.currentUser = this.currentUserSubject.asObservable();
}))
signin(email: string, password: string) {
return new Promise<any>((resolve, reject) => {
// --- login with email and password in firebase
this.firebaseAuth.auth.signInWithEmailAndPassword(email, password)
.then(
res => {
// --- Once login is successful, get the user object form the backend
this.subscription =this.userService.findByUsername(res.user.uid).subscribe(data=>{
this.currentUserSubject.next(data);
localStorage.setItem("currentUser", JSON.stringify(data));
resolve(this.firebaseAuth.auth.currentUser);
})
} ,
err => {reject(err); }
).catch(err => {
console.log('Something went wrong:', err.message);
});
});
}
async logout() {
await this.firebaseAuth.auth.signOut().then(()=>{
this.currentUserSubject.next(null);
this.currentUserSubject.complete();
this.subscription.unsubscribe()
localStorage.removeItem('currentUser');
this.router.navigate(['/signin']);
})
}
}