Я использую RxJs Subject
authListener
для получения статуса авторизации пользователя:
export class AuthService {
private authListener = new Subject<boolean>();
isLoggedIn() { return this.authListener.asObservable(); }
login() {
localStorage.setItem('token', token);
...
this.authListener.next(true);
}
logoff() {
localStorage.removeItem('token');
...
this.authListener.next(false);
}
}
Так что я могу назвать authListener
значение в компонентах:
export class HeaderComponent implements OnInit {
isAuthenticated = false;
auth$: Subscription;
constructor(private authService: AuthService) { }
ngOnInit() {
this.auth$ = this.authService.isLoggedIn().subscribe(
(isAuth: boolean) => {
this.isAuthenticated = isAuth;
});
}
}
Однако это не кажется надежным, поскольку пользователь может сделать что-то вроде обновления страницы, и тогда authListener
будет потеряно.Есть ли надежный способ сделать это?Я пытаюсь избежать localStorage, потому что пользователь может изменить authListener в любое время.
ОБНОВЛЕНИЕ: Кажется, хранение файлов cookie - это путь.Как я могу хранить Auth State
и JWT Token
внутри куки, используя Node.js + Express (HttpOnly; Secure)?Должно быть что-то вроде этого ...
// логин исходного ответа
res.status(200).json({success: true, token: token, reftoken: refreshToken, expiresIn: 900, name: user.name});
// логин cookie-ответа
res.cookie('token', token, { secure: true, httpOnly: true });
res.cookie('tokenref', refreshToken, { secure: true, httpOnly: true });
res.cookie('expiration', expireDate, { secure: true, httpOnly: true });
res.status(200).json({success: true, name: user.name});