SAPUI5 / AJAX, отправка основных данных аутентификации
Я пытаюсь получить доступ к API SAP Successfactors из вызова AJAX в приложении SAPUI5.
Я могу нормально получить доступ к API, используя POSTMAN и предоставив учетные данные для базовой аутентификации.
Как я могу предоставить эти учетные данные непосредственно в AJAX. Я пробовал множество способов из многочисленных постов, но ни один метод не работает.
Ответ от Google Dev Tools (вкладка "Консоль")
Failed to load https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://webidetesting#####-#####.dispatcher.hana.ondemand.com' is therefore not allowed access.
Ответ от Google Dev Tools (вкладка "Сеть")
Authentication credentials are required. Please provide a valid username, password and company id
Ajax.
var aData = jQuery.ajax({
type: "GET",
contentType: "application/json",
crossDomain: true,
url: "https://api2.successfactors.eu/odata/v2/PerPerson?$select=personId",
xhrFields: {
withCredentials: true
},
beforeSend: function (req) {
req.setRequestHeader('Authorization', 'Basic ' + btoa('Username:Password'));
req.setRequestHeader('Access-Control-Allow-Origin', '*');
},
headers: {
"Authorization": "Basic " + btoa("Username" + ":" + "Password"),
"Access-Control-Allow-Origin": "*"
},
username: "Username",
password: "Password",
dataType: "json",
async: false,
success: function (data, textStatus, jqXHR) {
oModel.setData({
modelData: data
});
alert("success to post");
},
error: function (oError) {
console.log(oError);
}
});
3 ответа
Следующие проблемы могут быть проблемой:
1) Имя пользователя типа: ИМЯ ПОЛЬЗОВАТЕЛЯ @ КОМПАНИЯ: ПАРОЛЬ перед отправкой?
2) URL-адрес конечной точки должен соответствовать вашему дата-центру, возможно, DC2 правильный, но также может быть DC12? https: //api12.successfactors.eu / odata / v2 / PerPerson? $ select = personId вместо https: //api2.successfactors.eu / odata / v2 / PerPerson? $ select = personId
3) Передайте ссылку на вашу функцию успеха
var that = this;
....
success: function (data, textStatus, jqXHR) {
var oModel = that.getView().getModel(); // get your model, instatiated outside this method
oModel.setData({
modelData: data
});
alert("success to post");
},
error: function (oError) {
console.log(oError);
}
....
4) Работа с SAP Cloud Plattform - верный способ избежать проблем с несколькими источниками!
Пункт назначения (Связь -> Пункты назначения) в SAP CP:
Не забудьте проверить соединение и получить код состояния HTTP = 200!
Name: sap_hcmcloud_core_odata,
Type: HTTP
URL: https://api12preview.sapsf.eu
Auth: Internet, Basic Authentication
Your User (Username@Company),
Your Password
Properties
WebIDEEnabled = true
WebIDESystem = SFSF
WebIDEUsage = odata_gen
neo-app.json добавить маршрут:
{ "path": "/sf-dest",
"target": {
"type": "destination",
"name": "sap_hcmcloud_core_odata"
},
"description": "SFSF Connection"
}
в вашем контроллере
sap.ui.define([
"sap/ui/core/mvc/Controller"], function (Controller) {
"use strict";
return Controller.extend("yourNamespace.yourAppName.controller.Main", {
onInit: function () {
var oModel = new sap.ui.model.json.JSONModel();
var sHeaders = {
"Content-Type": "application/json",
"Accept": "application/json",
};
//sending request
oModel.loadData("/sf-dest/odata/v2/PerPerson?$select=personId", null, true, "GET", null, false, sHeaders);
console.log(oModel);
}
});
});
Назначение SCP - это ответ в этом случае, но что, если есть 2 вызова, один для API аутентификации (для получения токена) и другой для GET API (используя полученный токен в качестве аутентификации?)
Ответ состоял в том, чтобы просто создать DESTINATION без аутентификации и применить все авторизации в AJAX.