我有简单的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;
}
答案 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
)内执行此操作。