Angular AuthListener - Как сохранить пользователь вошел в систему после обновления страницы - PullRequest
0 голосов
/ 05 октября 2018

Я использую 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});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...