Я знаю, что это довольно общий вопрос, но, надеюсь, он имеет смысл.
В приложении, над которым я работаю, есть несколько стратегий аутентификации. И в зависимости от того, хочет ли пользователь войти в систему через некоторые социальные сети или использовать свой собственный адрес электронной почты и пароль, одна из этих стратегий устанавливается для службы аутентификации. Служба аутентификации имеет несколько методов, таких как 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
и т. Д., Будут отличаться. Поэтому приложение должно каким-то образом «помнить», какой метод аутентификации использовался изначально.