我正在尝试两种情况: 1.重定向可以从外部站点发生到我站点的其中一个页面。我试图在此重定向后使用document.referrer捕获外部站点名称,但它是空的。 [注意 - 我在Azure AD身份验证后重定向。]
请建议如何使用angular 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";
}
}
如果有帮助,请告诉我。