Динамическая аутентификация со стратегиями в угловом приложении - PullRequest
0 голосов
/ 24 октября 2019

Я знаю, что это довольно общий вопрос, но, надеюсь, он имеет смысл.

В приложении, над которым я работаю, есть несколько стратегий аутентификации. И в зависимости от того, хочет ли пользователь войти в систему через некоторые социальные сети или использовать свой собственный адрес электронной почты и пароль, одна из этих стратегий устанавливается для службы аутентификации. Служба аутентификации имеет несколько методов, таких как login, logout и несколько других, и они вызываются в стратегии, что-то вроде этого this.strategy.logout().

Все работает хорошо, пока пользователь не перезагрузит страницу илипытается перейти на какую-либо страницу, набрав ее полный URL, после чего все сбрасывается.

Сохранение имени стратегии в localStorage не выглядит хорошей идеей. Я действительно не знаю, как лучше это сделать.

РЕДАКТИРОВАТЬ:

Вот часть службы аутентификации, которую я использую:

@Injectable({
  providedIn: 'root'
})
export class AuthService extends AbstractAuthService {
  private _strategy: AbstractAuthStrategy = null;

  constructor() {
    super();
  }

  setStrategy(@Inject('strategy') strategy: AbstractAuthStrategy): void {
      this._strategy = strategy;
  }

  public signIn(email?: string, password?: string): Observable<firebase.auth.UserCredential> {
      return this._strategy.signIn(email, password);
  }

Тогдаэта стратегия должна быть установлена ​​и использована в компоненте входа. Я использую firestore, который обеспечивает определенные функции аутентификации, в частности, позволяя аутентифицировать пользователя через различные социальные сети, такие как Google и Twitter. С точки зрения подхода, который я принял, это будут стратегии. Я буду использовать токен jwt, но он все равно не решит проблему со стратегиями, потому что в зависимости от того, какой пользователь выбрал реализацию методов login, signup и т. Д., Будут отличаться. Поэтому приложение должно каким-то образом «помнить», какой метод аутентификации использовался изначально.

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