2
각도 2 http get 및 route guard에 문제가 있습니다.각도 2 http가 루트 가드 내부에 있음
사용자가 경로 경비에 로그인했는지 확인하려고합니다.
이
은 서비스 기능 isLogged 다른 서비스를isLogged() {
return this.auth.isLogged();
}
를 호출 만이 줄 수있는 가드 파일
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.checkLogin(state.url);
}
checkLogin(url) {
if(url == "/login") {
return !this.service.isLogged()
}
if(this.service.isLogged()) {
return true;
}
this.service.redirectURL = url;
this.router.navigateByUrl('/login');
return false;
}
입니다 그리고 이것은 HTTP 호출
isLogged() {
let isLogged = new Observable<boolean>(observer => {
var headers = new Headers();
headers.append("Content-Type", 'application/json');
return this.http.get(`${Constants.SERVER_IP}/auth/logged`,{headers: headers})
.map(res => res.json())
.map(user => {
observer.next(true);
observer.complete();
})
.catch(error => {
observer.next(false);
observer.complete();
});
});
return isLogged;
}
을 수행하는 인증 서비스입니다
.catch 전화에서 다음 오류가 발생합니다.
'(error : any) =>'void '인수는'(err : any, catch : Observable) => ObservableInput '유형의 매개 변수에 할당 할 수 없습니다. 유형 'ObservableInput'에 'void'유형을 지정할 수 없습니다. 내가 관찰자에 아무것도 반환 할 필요가 없다고 생각
router.get('/logged', function(req, res, next) {
if(req.session.isLogged && req.session.userID) {
userBackend.getUserByID(req.session.userID)
.then(function(user) {
res.json(user);
})
.catch(function(reason) {
res.status(404).end(reason);
});
}
else {
res.status(404).end("User not logged in.");
}
});