Я работаю над интеграцией ServiceNow со сторонней системой. Используя эту интеграцию, пользователь может получить данные из сторонней системы и использовать их для создания билета запроса на обслуживание. Для этой интеграции мы создали виджет на Сервисном портале. Эта интеграция использует поток кода авторизации для аутентификации.
Виджет является частью элемента каталога, который пользователь может запросить на Сервисном портале. Итак, поток такой:
Пользователь входит в сервисный портал и выбирает элемент.
Пользователь выбирает запись в поле ссылки на элемент. Этот элемент также имеет кнопку, при нажатии на которую пользователь получает всплывающее окно авторизации, в котором появляется сторонний интерфейс входа в систему. Он вводит свои учетные данные для сторонней системы. Если аутентификация прошла успешно, всплывающее окно закрывается, а токены сохраняются в таблице ServiceNow oauth_credential.
Что происходит за сценой, так это то, что я использую функцию ServiceNow «Получить токен OAuth» из модуля 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.
Проблема:
Как только происходит авторизация и всплывающее окно закрывается, страница обновляется. Я не хочу, чтобы страница обновлялась, потому что предыдущий выбор, сделанный пользователем в поле ссылки, теряется при обновлении страницы. У меня есть больше кода в той же функции авторизации, где я буду использовать токен, сгенерированный всплывающим кодом авторизации. Но проблема в том, что если я добавлю код после всплывающего окна, всплывающее окно откроется, но затем оно приостановится и будет выполнена следующая строка кода. Кажется, что всплывающее окно асинхронно. Дополнительные функции кода используют токен, сгенерированный всплывающим окном, для получения данных из сторонней системы. Я не могу создать две кнопки, одну для авторизации, а другую для использования токенов. Я должен сделать это одним нажатием кнопки.
Могу ли я остановить обновление страницы после закрытия всплывающего окна? Могу ли я добавить некоторую логику после строки всплывающего окна, и эта логика должна выполняться только после закрытия всплывающего окна.
return false;
- person I_Al-thamary   schedule 01.12.2018