Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Angular 2身份验证保护http GET请求检查用户是否有会话_Node.js_Angular_Angular Routing_Angular Http_Angular Guards - Fatal编程技术网

Node.js Angular 2身份验证保护http GET请求检查用户是否有会话

Node.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(

我试图调用一个HTTPGET方法来检查用户是否与我的后端NodeJSAPI进行了会话,但我看不到发出的请求

我在用户登录时设置了一个observable,因此我的AuthGuard将首先检查它,如果设置为false,则调用后端查看是否存在现有会话

auth.guard.ts

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