请求

2017-01-09 23 views
1

我有简单化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

您需要subscribe的可观,以“火”起来。

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)内。

+0

是的,它帮助(部分),以及其他答案(取消点击事件)。现在它执行,但在令牌被删除后(因此失败)。 – wondra

+0

哦,你想要令牌后被删除?检查我更新的答案。你可以在res.status == 204里面或者你喜欢的任何地方删除令牌 – echonax

+0

发现另一个问题出现在服务器端,再加上错误配置的jwt(由于其他组件出现了另一个错误)。所有原来的问题都没有使用'subscribe'。另外,我应该*不*取消该事件。 – wondra