我需要通过新标签与Microsoft实现登录功能。
当前,我们的登录过程与Microsoft的合作方式不太适合我们的需求。用户单击登录按钮,重定向到Microsoft登录页面,输入他的信息,然后重定向回到我们的登录页面。所有这些都发生在同一选项卡上。在下面的代码中是一个示例:
authenticateOffice(finallyCallback?: () => void): void {
finallyCallback = finallyCallback || (() => {
});
let currentUrl = location.href;
this.redirectLocationUrl = currentUrl.substr(0, currentUrl.indexOf('#'));
let url = "https://login.microsoftonline.com/".concat(this.office365Domain, "/oauth2/v2.0/authorize?client_id=", this.clientId,
"&response_type=id_token&redirect_uri=", this.redirectLocationUrl, "&response_mode=fragment&scope=openid profile&state=12345&nonce=678910");
window.location.href = url;
}
非常简单,也没有太复杂。
用外行的话来说,我们要做的是:
1.单击登录按钮时打开一个新选项卡
2.用户在Microsoft登录页面上输入其信息
3.授权后,标签会自动关闭
4.然后,我们的登录页面会收到来自oauth2的Microsoft的“ id_token”,然后我将执行其余的登录逻辑
else if (!StringHelper.isNullOrEmpty(window.location.hash) && window.location.hash.startsWith('#id_token')) {
let response = window.location.hash;
this._office365Service.getOfficeId(response)
.subscribe((result: string) => {
let key = result;
if (key) {
this._loginService.processOfficeIdResult(key);
} else {
abp.message.warn(this._localizationService.localize('Office365User', this.localizationSourceName));
}
});
}
我的问题是这样的: 我们如何重新获得甚至控制该“新”标签并对其进行处理? 我们如何知道授权何时完成?授权失败还是成功?
在我以前的研究中,我所能做的就是回调方法,但是如何将函数发送到知道何时关闭该选项卡的新选项卡,以及如何在成功验证用户身份后接收授权信息?
var win = window.open("window.html");
然后呢?您编写一个每秒调用一次并检查输入的函数吗?
(只是在这里提出想法)