Я работаю над интеграцией ServiceNow со сторонней системой.Используя эту интеграцию, пользователь может получить данные из сторонней системы и использовать их для создания заявки на обслуживание.Для этой интеграции мы создали виджет на сервисном портале.Эта интеграция использует поток кода авторизации для аутентификации.
Виджет является частью элемента каталога, который пользователь может запросить на Сервисном портале.Таким образом, поток выглядит так:
Пользователь входит в Сервисный Портал и выбирает элемент.
Пользователь выбирает запись в поле ссылки навещь.У этого элемента также есть кнопка, на которой, когда пользователь нажимает кнопку, ему представляется всплывающее окно авторизации, в котором отображается сторонний пользовательский интерфейс для входа.Он вводит свои учетные данные для сторонней системы.Если аутентификация прошла успешно, всплывающие окна закрываются, и токены сохраняются в таблице «oauth_credential» ServiceNow.
Что происходит за кулисами, так это то, что я использую функцию ServiceNow «Получить OAuth Token» измодуль ServiceNow 'REST message'.См. Ниже:
HTML
<button type="button" ng-click="checkAccess()" class="btn btn-default">Check Access</button>
Клиентский скрипт
$scope.authorize = function() {
glideUserSession.loadCurrentUser().then(function(currentUser) {
var oauthRequestorSysId = currentUser.userID;
var oauthRequestorContext = 'sys_user';
var oauthProfileId = '59f05d7ddbf563003ca7da11cf961962';
var redirect = "https://dev000.service-now.com/oauth_redirect.do";
var oauth_initiator_url = '/oauth_initiator.do' +
'?oauth_requestor_context=' + oauthRequestorContext +
'&oauth_requestor=' + oauthRequestorSysId +
'&oauth_provider_profile=' + oauthProfileId +
'&response_type=code';
window.open(oauth_initiator_url, "", "height=500,width=800");
// additional code to use token once popup closes
});
}
Я могу достичь этого до сих пор.Это всплывающее окно сохраняет токены в ServiceNow.
Проблема:
Как только авторизация происходит и всплывающее окно закрывается, страница обновляется.Я не хочу, чтобы страница обновлялась, потому что предыдущий выбор, сделанный пользователем в поле ссылки, теряется при обновлении страницы.У меня есть больше кода в той же функции авторизации, где я буду использовать токен, сгенерированный всплывающим кодом авторизации.Но проблема в том, что если я добавляю код после всплывающего окна, всплывающее окно открывается, но затем оно останавливается и выполняется следующая строка кода.Кажется, что всплывающее окно является асинхронным.Дополнительная функциональность кода использует токен, сгенерированный всплывающим окном, для получения данных от сторонней системы.Я не могу создать две кнопки, одну для авторизации и другую для использования токенов.Я должен сделать это одним нажатием кнопки.
Можно ли остановить обновление страницы после закрытия всплывающего окна?Могу ли я добавить некоторую логику после строки всплывающего окна, и эта логика должна выполняться только после закрытия всплывающего окна.