2016-08-05 11 views
6

Ich benutze Oauth-Authentifizierung, um Benutzer anmelden. Nachdem der Benutzer sich angemeldet hat, wird er von der URL übernommen. URL wie folgt: http://xxx/callback#access_token=xxx. dann umleiten auf andere Seite. Ich verwende this.router.navigateByUrl Umleiten, das Hash-Tag wird entfernt, aber wenn ich auf einen anderen Link klicke, wird das Hash-Fragment erneut angezeigt. Wie kann ich das Hash-Token-Fragment dauerhaft entfernen?Entfernen Sie das Hash-Fragment aus der URL dauerhaft

Beispiel:

nach der Anmeldung die Verwendung in // xxx/Rückruf # access_token = xxx

zu umleiten // xxx/home

dann Linka klicken, Die URL lautet // xxx/linkA # access_token = xxx

erwartet url ist // xxx/Linka

Antwort

2

Ich weiß nicht, wie Sie umleiten, aber ich nehme an, es durch die Methode, die Sie verwenden, verursacht wird.

Eine Möglichkeit, das Fragment zurückgesetzt ist

<a routerLink="path" fragment=""> 

(nicht ich selbst noch nicht getestet).

Von Code

let tree = this.router.navigate(['path'], {relativeTo: this.route, queryParams: ''}); 

Siehe auch https://angular.io/docs/ts/latest/api/router/index/Router-class.html#!#createUrlTree-anchor

+0

Danke, gleich nach Login Umleitung, ist die erste URL eine OAuth Callback-URL. Ich umleitung von Code nicht durch HTML-Tag –

+0

Ich aktualisierte meine Antwort. –

1

Sie useHash gleich false bei den Einfuhren von Ihrer app.module setzen sollte

@NgModule({ 
    bootstrap: [ App ], 
    declarations: [App], 
    imports: [ 
    .... 
    RouterModule.forRoot(ROUTES, { useHash: false }) 
    ], 
    providers: [] 
}) 

es auf false setzen wird es von der Verwendung HashLocationStrategy stoppen, die in der Standard-RouterModule.forRoot function ist

2

Ich habe gleiche Problem , meine Lösung ist nach dem Zugriff access_token, können Sie einstellen: window.location.hash = ''

Es funktioniert für mich

0

Wenn Sie zum Beispiel mit auth0 in ihrem doc sind sie tun:

this.auth0.parseHash({ _idTokenVerification: false }, (err, authResult) => { 
    if (authResult && authResult.accessToken && authResult.idToken) { 
     window.location.hash = ""; 
    } 
}); 

Stattdessen tun:

this.auth0.parseHash({ _idTokenVerification: false }, (err, authResult) => { 
    if (authResult && authResult.accessToken && authResult.idToken) { 
     this.router.navigate["/home"] 
    } 
}); 

Dies entfernt die Ganzer Hash

Verwandte Themen