Авторизация с помощью angular2

496
13 марта 2017, 11:06

Имеется простой модуль к доступу к компоненту через AuthGuard

const routes = [
  { path: '', component: TasklistComponent, canActivate: [AuthGuard], },
  { path: 'register', component: RegistrationComponent },
  { path: 'login', component: LoginComponent },

А так же проверка на авторизацию при запуске приложения

{ provide: APP_INITIALIZER,
      useFactory: asset,//(_auth: AuthService) => () => _auth.login(),
      deps:[AuthService],
      multi: true }
export function asset(_auth: AuthService) {
  return () => _auth.login()
}

Есть компонент логина, внутри которого я делаю переход после успешной авторизации к роуту "" - то есть запускается GUARD

this._user.authUser(this.loginForm.value.username,this.loginForm.value.password)
.subscribe(msg => {
    if (msg.token) {
      this._auth.updateStatus(true);
      //this._auth.isLoggedIn = true;
      this.router.navigate(['']);
    }

Проблема в том что внутри сервиса AuthService данные меняются, а Guard этих изменений не видит

isLoggedIn: Subject<boolean> = new Subject<boolean>();
  statusStream$ = this.isLoggedIn.asObservable();
  updateStatus(stat:boolean) {
    console.log('update');
    this.isLoggedIn.next(stat);
  }

Я уже пытался и через подписки, внутри компонента логина изменений отслеживаются, внутри Guard - нет Код Guard

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    this._subscription = this._auth.statusStream$.subscribe( value => {
      this.status = value;
    });
    let url: string = state.url;
    return this.checkLogin(url);
  }
  checkLogin(url: string): boolean {
    if (this.status) {
      return true;
    }
    this._auth.redirectUrl = url;
    this.router.navigate(['/login']);
    return false;
  }

Я подозреваю что проблема в том, что Guard инициализируется раньше сервиса (но по идее в этом же не должно быть проблем) Помимо подписок пробовал меня и возвращать просто параметры сервиса - не помогает((((

READ ALSO
Изменить код в теге &lt;script&gt; и выполнить

Изменить код в теге <script> и выполнить

Необходимо программными средствами изменить содержание тега <script>, а затем выполнить новый кодНичего на ум не приходит, как удалить его...

340
Не получается реализовать таймер

Не получается реализовать таймер

Привет всем! Такая проблема, хочу реализовать таймерНо после "time_query" значение не изменяется

252
Проблема с вызовом метода объекта [дубликат]

Проблема с вызовом метода объекта [дубликат]

На данный вопрос уже ответили:

269
Итераторы, генераторы

Итераторы, генераторы

Зачем на практике нужны итераторы? Вообще, интересует в общем-то php и js, но они же есть во многих языкахНапример зачем мне библиотека SPL и её интерфейсы...

308