【问题标题】:Remove the hash fragment from url permanently从 url 中永久删除哈希片段
【发布时间】:2016-08-05 00:11:22
【问题描述】:

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

例子:

//xxx/callback#access_token=xxx

中使用登录后

重定向到//xxx/home

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

预期的网址是 //xxx/linkA

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    看起来这个问题已经在 Angular 2 最终版本中得到修复(现在用 2.1.0 测试它)。

    以下对我有用:

    router.navigate([]);
    

    重定向到没有哈希的“索引”页面,并且不会在后续导航中重新出现。

    【讨论】:

      【解决方案2】:

      你应该把useHash等于false放在你的app.module的导入中

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

      将其设置为 false 将阻止它使用 HashLocationStrategy,这是 RouterModule.forRoot function 中的默认值

      【讨论】:

        【解决方案3】:

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

        对我有用

        【讨论】:

          【解决方案4】:

          我不知道你是如何重定向的,但我认为它是由你使用的方法引起的。

          重置片段的一种方法是

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

          (尚未测试自己)。

          来自代码

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

          另见https://angular.io/api/router/Router#createurltree

          【讨论】:

          • 谢谢,登录重定向后,第一个 url 是 OAuth 回调 url。我通过代码而不是 html 标签重定向
          • 这行得通, 。但仍然有标签#,比如xxx/x#
          • 对不起,我以某种方式将它与查询参数混合在一起。你试过[fragment]="[]"吗?
          • [fragment]="[]" 和 [fragment]="['']" 一样,你是对的。你知道如何在不重定向和导航的情况下删除路由器中的片段吗?有方法吗?
          • 我猜不是。 . . .
          【解决方案5】:

          例如,如果您在他们的文档中使用 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"]
              } 
          });
          

          这将删除整个哈希

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-29
            • 2012-04-19
            • 2013-05-15
            • 2013-03-02
            • 1970-01-01
            • 2017-05-31
            • 2018-01-23
            相关资源
            最近更新 更多