Как использовать authStateChange $ ampifyService guard.ts - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь подписаться на изменения состояния для аутентификации AWS Cognito с использованием службы ampify в guard.ts

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AmplifyService }  from 'aws-amplify-angular';
@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor( private amplifyService: AmplifyService ) {
  }
  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
      return this.amplifyService.authStateChange$.subscribe(authSate => {
      })
  }
}

Подписаться на состояния авторизации, указанные в Подписаться на изменения состояния аутентификации

VS редактор кода выдает ошибку.

Type 'Subscription' is not assignable to type 'boolean | Observable<boolean> | Promise<boolean>'

1 Ответ

0 голосов
/ 02 декабря 2018

Используйте map вместо subscribe.A route guard ожидает boolean, Observable<boolean | urlTree>, Promise<boolean | urlTree>

В зависимости от версии rxjs вам может понадобиться использовать метод pipe для использования map.Если ваш rxjs 5.5+, используйте его как:

return this.amplifyService.authStateChange$.pipe(
    map(authSate => {
    // do your logic here
    })
)

Если у вас версия rxjs меньшего размера, используйте его как:

return this.amplifyService.authStateChange$.map(authSate => {
    // do your logic here
})

Смотрите рабочий пример здесь:https://stackblitz.com/edit/angular-8dyxaw?file=src%2Fapp%2Fapp.component.ts

...