2
角2のHTTPのgetとrouteガードに問題があります。角2 httpがルートガードの中に入る
ユーザーがルートのガードにログインしているかどうかを確認しようとしています。
これはisLoggedサービス機能は、別のサービス
isLogged() {
return this.auth.isLogged();
}
を呼び出し、これは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;
}
を行う認証サービスであるだけで、このラインである
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;
}
ガードファイルであります
。キャッチコールで次のエラーが発生します。
'(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.");
}
});