Мне нужно реализовать функцию входа в 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. Затем наша страница входа получает «id_token» от Microsoft от oauth2, и с этим я делаю остальную часть логики входа в систему
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");
И что тогда? Вы пишете функцию, которая вызывает себя каждую секунду и проверяет ввод?
(просто бросаю идеи здесь)