Angular编码哈希片段:如何防止它?

时间:2018-03-08 20:43:52

标签: angular

我正在使用Angular 5.2和Auth0进行身份验证。登录由Auth0在托管登录页面上完成。该页面重定向到我的Angular应用程序中的回调页myapp.com/login-callback。

Auth0通过url中的哈希移交一些令牌。所以它重定向到

  

myapp.com/login-callback#access_token=123456789

现在出现问题..因为我将项目更改为Angular-CLI并将其从5.1更新为5.2 Angular对哈希片段进行编码,以便它成为

  

myapp.com/login-callback#access_token%3D123456789

=被编码为%3D

因此,auth0解析功能不再起作用。

如何防止Angular编码url的哈希片段?我使用默认路由策略(通过路径,而不是哈希)。

2 个答案:

答案 0 :(得分:1)

我们刚刚使用Auth0遇到了同样的事情,虽然它没有禁用角度的“功能”,你可以抓取片段并将其传递给auth0的解析哈希函数。

import { ActivatedRoute } from '@angular/router';
import { WebAuth } from 'auth0-js';

//...
  constructor(private route: ActivatedRoute, private auth0: WebAuth) {}

  public handleAuth() {
    //...
    this.route.fragment.subscribe((hash) => {
      // hash is decoded at this point

      this.auth0.parseHash({hash}, (e, data) => {
        // ...

答案 1 :(得分:0)

默认情况下,Angular会使用encodeURIComponent()对您的URL进行编码,但您可以通过编写自定义URI序列化程序来覆盖它。

检查此答案:angular 2 disable url encoding

基本上,您使用自己的自定义覆盖UriSeriaizer。