Я хотел бы предоставить проверку подлинности на стороне сервера, прежде чем дать доступ к определенному маршруту в angular.
У меня есть AuthGuard, который реализует CanActivate, и сервис AuthService.У authService уже есть private loggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(null);
, на которые подписываются представления, чтобы узнать, вошел ли пользователь в систему или нет.Я действительно не знаю, если мой подход неверен, но, похоже, он не работает.
Это то, что я имею в auth.guard.ts:
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<boolean> {
return this.authService.isAuthenticated().map((isLoggedIn) => {
if (isLoggedIn) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
})
}
, и этоauth.service.ts:
@Injectable()
export class AuthService {
private loggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(null);
constructor(
private router: Router,
private http: HttpClient
) {
}
get isLoggedIn() {
return this.loggedIn.asObservable();
}
isAuthenticated() : Observable<boolean> {
const headers = new HttpHeaders().set("X-Requested-With", "XMLHttpRequest");
return this.http.get('/user', {headers: headers}).map(
response => {
if (response['username']) {
this.loggedIn.next(true);
return true;
} else {
return false;
}
}
)
}