2016-08-05 3 views
6

Я использую аутентификацию oauth для входа в систему. После того, как пользователь выполнил вход в систему, возьмите URL-адрес. URL-адрес: http://xxx/callback#access_token=xxx. затем перенаправить на другую страницу. Я использую this.router.navigateByUrl для перенаправления, тэг hash удаляется, но когда я нажимаю другую ссылку, фрагмент хэша будет отображаться снова. Как я могу удалить фрагмент токена хеширования навсегда?Удалить хэш-фрагмент из URL-адреса постоянно

Пример:

после использования Войти в // ххх/обратного вызова # access_token = ххх

перенаправлять // ххх/дом

затем нажмите Линка, URL-адрес: // xxx/linkA # access_token = xxx

ожидается URL является // ххх/LINKA

ответ

2

Я не знаю, как вы поменяете, но я предполагаю, что это вызвано метод, который вы используете.

Один из способов сбросить фрагмент является

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

(не проверял сам еще).

Из кода

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

Смотрите также https://angular.io/docs/ts/latest/api/router/index/Router-class.html#!#createUrlTree-anchor

+0

Спасибо, сразу после переадресации имени, первым URL-адресом является URL-адрес обратного вызова OAuth. Я перенаправляю код не по тегу html –

+0

Я обновил свой ответ. –

+0

это работает,

1

Вы должны положить useHash равное false на импорт вашего app.module

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

положить его ложь остановит его от использования HashLocationStrategy, который по умолчанию в RouterModule.forRoot function

2

У меня такая же проблема , мое решение после получения access_token, вы можете установить: window.location.хэш = ''

Это работает для меня

0

Если вы, например, с помощью auth0 в их документ они делают:

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

Вместо делать:

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

Это удалит весь хеш

Смежные вопросы