document.referrer在角度2中始终为空白

时间:2017-02-27 23:26:50

标签: angular angular2-routing azure-active-directory

我正在尝试两种情况: 1.重定向可以从外部站点发生到我站点的其中一个页面。我试图在此重定向后使用document.referrer捕获外部站点名称,但它是空的。 [注意 - 我在Azure AD身份验证后重定向。]

  1. 在我的网站内(发布后验证 - 要清楚)。我从一个页面重定向到另一个页面。在下一页,我试图通过document.referrer获取上一页的URL。但在这里,它又一片空白。
  2. 请建议如何使用angular 2打字稿来实现从重定向到当前页面的上一页。

2 个答案:

答案 0 :(得分:1)

您可以尝试将引荐来源放在state变量中,然后在AzureAD重定向后重新读取。

有关状态变量和您可以发送的其他参数的一些信息,请结帐this doc

答案 1 :(得分:0)

Microsoft还为演示调用Angular2中的Microsoft Graph提供了代码示例angular2-connect-rest-sample

在此代码示例中,我们需要首先使用Azure AD进行身份验证。因此,我们可以在Angular2中引用有关身份验证的代码。

但是当我尝试登录时,我遇到了重定向网址不匹配的问题。在我更改下面的代码后,代码示例对我来说效果很好。

authHelper.ts

import { Injectable } from "angular2/core";
import { SvcConsts } from "../svcConsts/svcConsts";

@Injectable()
export class AuthHelper {
    //function to parse the url query string
    private parseQueryString = function(url) {
        var params = {}, queryString = url.substring(1),
        regex = /([^&=]+)=([^&]*)/g, m;
        while (m = regex.exec(queryString)) {
            params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
        }
        return params;
    }
    private params = this.parseQueryString(location.hash);
    public access_token:string = null;

    constructor() {
        //check for id_token or access_token in url
        if (this.params["id_token"] != null)
            this.getAccessToken();
        else if (this.params["access_token"] != null)
            this.access_token = this.params["access_token"];
    }
    // add this function to modify the redirect url using the base address  
    getRedrectUrl(){
        return window.location.href.substr(0,window.location.href.indexOf("#"));
    }

    login() {
        //redirect to get id_token
        window.location.href = "https://login.microsoftonline.com/" + SvcConsts.TENANT_ID + 
            "/oauth2/authorize?response_type=id_token&client_id=" + SvcConsts.CLIENT_ID + 
            "&redirect_uri=" + encodeURIComponent(this.getRedrectUrl()) + 
            "&state=SomeState&nonce=SomeNonce";
    }

    private getAccessToken() {
        //redirect to get access_token
        window.location.href = "https://login.microsoftonline.com/" + SvcConsts.TENANT_ID + 
            "/oauth2/authorize?response_type=token&client_id=" + SvcConsts.CLIENT_ID + 
            "&resource=" + SvcConsts.GRAPH_RESOURCE + 
            "&redirect_uri=" + encodeURIComponent(this.getRedrectUrl()) + 
            "&prompt=none&state=SomeState&nonce=SomeNonce";
    }
}

如果有帮助,请告诉我。