Я рекомендую использовать простой EventEmitter или Rx JS Subject / BehaviorSubject .
user = new BehaviorSubject<User>(null);
этот пользователь будет собственностью вашего сервиса.
каждый раз, когда пользователь успешно зарегистрировался или вошел в систему, вы уведомите всех подписчиков о новом значении. this.user.next(user);
и для функции автоматического входа в систему, автоматического выхода из системы вы можете использовать localStorage localStorage.setItem('userData', JSON.stringify(user));
везде, где вам нужен текущий пользователь, например, на navbar, подпишитесь на него, и он даст вам последние изменения.
this.userSub = this.authService.user.subscribe(user => {
});
и, наконец, обязательно отмените подписку на подписку пользователя, где бы вы ни подписались
ngOnDestroy() {
this.userSub.unsubscribe();
}
для функции автоматического входа, даже если страница обновилась, мы сохранили текущий пользовательский объект в локальном хранилище всякий раз, когда пользователь успешно входил в систему / регистрировался, поэтому, используя ngOnInit
ловушку app.component (родительский компонент), мы можем достичь того, что вам нужно, путем извлечения и восстановления объекта пользователя в angular -app.
autoLogin() {
const userData = JSON.parse(localStorage.getItem('userData'));
if (!userData) {
return;
}
const loadedUser = new User(
userData.email,
userData.token,
new Date(userData.expiresIn)
);
if (loadedUser.token) {
this.user.next(loadedUser);
}
}
вы можете проверить действительность токена и expiresIn перед отправкой восстановленного пользователя. Обязательно вызовите autoLogin () при запуске angular -app.