在注销过程中请求不被发送

时间:2017-01-09 16:14:01

标签: javascript angular httprequest jwt rxjs

我有简单的Angular2应用程序,如果用户点击

<a class="dropdown-item" (click)=authService.logout() href="/welcome">Log out</a>

注销菜单项,AuthenticationServices的logout()方法执行

logout() {
  alert('loging out');
  this.authHttp.post(this.endpoint_url + '/auth/logout','').map(res => { 
    if(res.status == 204)  alert('logout successful');
    else alert('logout failed');
  }); 

  this.currentUser = null;
  localStorage.removeItem('token'); 
}

问题是部分

  this.authHttp.post(this.endpoint_url + '/auth/logout','').map(res => { 
    if(res.status == 204)  alert('logout successful');
    else alert('logout failed');
  }); 

似乎没有被执行过。使用authHttp(angular2-jwt)访问受保护的API可以在应用程序的其他部分中使用而不会出现任何问题。
第一个警告“注销”弹出,用户注销并重定向到“/ welcome”,无法再访问API的私有部分。但是,在浏览器和服务器日志中都没有“/ auth / logout”请求。

还有AuthGuard服务可以重定向任何未登录的用户:

canActivate() {
//loggedIn() {!(this.currentUser == null);}
if (!this.auth.loggedIn()) {
  this.router.navigate(['/welcome']);
  return false;
}
return true;
}

1 个答案:

答案 0 :(得分:1)

您需要subscribe来观察,以便&#34;解雇&#34;它们。

this.authHttp.post(this.endpoint_url + '/auth/logout','').subscribe((res)=>{
    if(res.status == 204){  
     alert('logout successful');
     this.currentUser = null;
     localStorage.removeItem('token');
   }else {alert('logout failed');}           
}); 

如果您需要在注销成功后删除令牌,则需要在函数回调(subscribe)内执行此操作。