永久删除url中的哈希片段

时间:2016-08-05 00:11:22

标签: angular angular2-routing

我使用oauth身份验证登录用户。用户登录后,从URL获取。像这样的网址:http://xxx/callback#access_token=xxx。然后重定向到其他页面。我使用 this.router.navigateByUrl 进行重定向,删除了哈希标记,但是当我点击其他链接时,哈希片段将再次显示。如何永久删除散列令牌片段?

示例:

使用 // xxx / callback#access_token = xxx

后登录

重定向到 // xxx / home

然后点击linkA,网址为 // xxx / linkA#access_token = xxx

预期网址 // xxx / linkA

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您应该将useHash等于false添加到a​​pp.module的导入

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

将其设为false会阻止其使用HashLocationStrategy

中的默认值RouterModule.forRoot function

答案 2 :(得分:2)

我有同样的问题,我的解决方案是在检索到access_token之后,你可以设置: window.location.hash =''

它对我有用

答案 3 :(得分:1)

看起来这已在Angular 2最终版本中修复(现在用2.1.0测试)。

以下适用于我:

router.navigate([]);

重定向到&#34;索引&#34;没有哈希的页面,它不会在后续导航中重新出现。

答案 4 :(得分: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"]
    } 
});

这将删除整个哈希