Angular Auth Guard после входа в систему не получает наблюдаемой информации - PullRequest
0 голосов
/ 26 марта 2019

Я реализовал логин в угловой.Это работает хорошо, но я люблю перенаправлять после успешной аутентификации.

Перенаправление не работает после получения пользователя с сервера.Если я обновляю свою страницу и использую логин, он работает.

Я получаю объект от своего веб-сервиса и сохраняю его в "localStorage".Я использую BehaviourSubject для наблюдения за моим текущим пользователем.

Если я нажимаю 'login', я сталкиваюсь с auth guard, но auth guard не знает пользователя.(null)

В чем моя ошибка?

Auth.guard.ts

@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
    constructor(
        private router: Router,
        private authenticationService: AuthService
    ) { }

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        console.log(this.authenticationService.currentUserValue);
        if (this.authenticationService.currentUserValue) {
          return true;
        }
        // not logged in so redirect to login page with the return url
        this.router.navigate(['/entrance/login'], { queryParams: { returnUrl: state.url } });
        return false;
    }
}
@Injectable({
  providedIn: 'root'
})
export class AuthService {
  private currentUserSubject: BehaviorSubject<User>;

  constructor(private http: HttpClient) {
    this.currentUserSubject = new BehaviorSubject<User>(JSON.parse(localStorage.getItem('currentUser')));
}

public get currentUserValue(): User {
    return this.currentUserSubject.value;
}


login(username: string, password: string) {
    return this.http.post<User>('/api/auth', { username, password }).pipe(map(user => {
        // login successful if there's a jwt token in the response
        if (user && user.token) {
            // store user details and jwt token in local storage to keep user logged in between page refreshes
            localStorage.setItem('currentUser', JSON.stringify(user));
            this.currentUserSubject.next(user);
        }

        return user;
    }));
}

    this.authService.login(email, password).pipe(first()).subscribe(data => {
        this.router.navigate([this.returnUrl]);
    });

Мне нравитсяперенаправление сразу после входа в систему без обновления.

Вы видите какие-либо ошибки?

...