Node.js Angular 2身份验证保护http GET请求检查用户是否有会话
我试图调用一个HTTPGET方法来检查用户是否与我的后端NodeJSAPI进行了会话,但我看不到发出的请求 我在用户登录时设置了一个observable,因此我的AuthGuard将首先检查它,如果设置为false,则调用后端查看是否存在现有会话 auth.guard.tsNode.js Angular 2身份验证保护http GET请求检查用户是否有会话,node.js,angular,angular-routing,angular-http,angular-guards,Node.js,Angular,Angular Routing,Angular Http,Angular Guards,我试图调用一个HTTPGET方法来检查用户是否与我的后端NodeJSAPI进行了会话,但我看不到发出的请求 我在用户登录时设置了一个observable,因此我的AuthGuard将首先检查它,如果设置为false,则调用后端查看是否存在现有会话 auth.guard.ts canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { this.authService.loggedIn.subscribe(
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.authService.loggedIn.subscribe(currentState => {
this.loggedIn = currentState;
});
if (this.loggedIn) {
return true;
} else {
console.log('check for login');
this.http.get(environment.apiURL + '/checklogin'
, { withCredentials : true }
).map(user => {
const resp = user.json();
// login successful if there's a user
if (resp.isLoggedIn) {
this.authService.obsLoggedIn.next(true);
return true;
} else {
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
console.log('about to return false for authguard');
return false;
}
});
}
}
app.get('/checklogin', function(req, res) {
console.log('get from login ' + req.body);
req.session.user ? res.status(200).send({isLoggedIn: true}) : res.status(200).send({isLoggedIn: false});
});
app.js
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.authService.loggedIn.subscribe(currentState => {
this.loggedIn = currentState;
});
if (this.loggedIn) {
return true;
} else {
console.log('check for login');
this.http.get(environment.apiURL + '/checklogin'
, { withCredentials : true }
).map(user => {
const resp = user.json();
// login successful if there's a user
if (resp.isLoggedIn) {
this.authService.obsLoggedIn.next(true);
return true;
} else {
this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }});
console.log('about to return false for authguard');
return false;
}
});
}
}
app.get('/checklogin', function(req, res) {
console.log('get from login ' + req.body);
req.session.user ? res.status(200).send({isLoggedIn: true}) : res.status(200).send({isLoggedIn: false});
});
我知道我的apiURL没有问题,因为进入登录页面并登录工作正常,我可以看到后端日志
有人知道我的http请求为什么不起作用吗?那么您在对
/checklogin
的http get调用中遇到了问题?另外,您当前使用的是angulars Http服务中的哪一个<代码>Http或HttpClient
?在HttpClient
的情况下,不再需要映射到json,而是定义调用结果的类型并自动解析。我看到的问题是,您没有订阅/checklogin
调用,您只是定义调用完成后会发生什么。为了执行它,我想你必须先订阅它。正确。我在get调用/checklogin时遇到问题。我现在正在使用Http。我知道我应该换成HttpClient。这会是一个问题吗?是的,你是对的,我从地图改为订阅。谢谢现在这可能不是问题,但它已被弃用,并且肯定会在angular的后续版本中删除。因此,如果您想了解最新版本,我强烈建议您切换到新的HttpClient