2017-01-09 3 views
1

ich simpel Angular2 App haben, wo, wenn der Benutzer auf den MenüpunktAntrag nicht beim Logout Prozedur gesendet werden

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

logout klickt, die der AuthenticationServices logout() Methode führt

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'); 
} 

das Problem ist der Teil

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

scheint nicht jemals ausgeführt werden. Der Zugriff auf die geschützte API mit authHttp (angular2-jwt) funktioniert in anderen Teilen der Anwendung ohne Probleme.
Die erste Warnung "Abmelden" wird angezeigt, Benutzer werden abgemeldet und zu "/ welcome" umgeleitet und können nicht mehr auf private Teile der API zugreifen. Es gibt jedoch keine Anforderung zum "/ auth/logout" im Browser oder in Serverprotokollen.


Es gibt auch AuthGuard Dienst, der alle nicht-angemeldeten Benutzer umleitet:

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

Antwort

1

Sie müssen subscribe zu Observablen, um „Feuer“ sie.

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');}   
}); 

Und wenn Sie das Token entfernen müssen nach der Abmeldung ist erfolgreich Sie dies innerhalb der Callback-Funktionen tun müssen, um (subscribe).

+0

Ja, es half (teilweise), zusammen mit anderen Antworten (Abbrechen des Klickereignisses). Jetzt wird es ausgeführt, aber nachdem das Token entfernt wurde (und somit fehlgeschlagen ist). – wondra

+0

Oh, du willst Token nachher entfernen? Überprüfen Sie meine aktualisierte Antwort. Sie können das Token innerhalb der res.status == 204 oder wo immer Sie wollen in der Subskription entfernen – echonax

+0

Stellt sich heraus, das andere Problem war auf der Serverseite, zusammen mit falsch konfigurierten JWT (die wegen eines anderen Fehlers in der anderen Komponente zu funktionieren schien). Das ursprüngliche Problem wurde nicht mit "subscribe" gelöst. Außerdem sollte ich das Event * nicht * absagen. – wondra

Verwandte Themen