Я реализовал логин в угловой.Это работает хорошо, но я люблю перенаправлять после успешной аутентификации.
Перенаправление не работает после получения пользователя с сервера.Если я обновляю свою страницу и использую логин, он работает.
Я получаю объект от своего веб-сервиса и сохраняю его в "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]);
});
Мне нравитсяперенаправление сразу после входа в систему без обновления.
Вы видите какие-либо ошибки?