SAPUI5 / AJAX, отправка основных данных аутентификации - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить доступ к 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 ]

0 голосов
/ 05 сентября 2018

Назначение SCP - это ответ в этом случае, но что, если есть 2 вызова: один для API аутентификации (для получения токена) и другой для GET API (с использованием полученного токена в качестве аутентификации?)

0 голосов
/ 06 сентября 2018

Ответ был просто создать DESTINATION без аутентификации и применить все авторизации в AJAX

0 голосов
/ 05 сентября 2018

Возможны следующие проблемы:

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 Platform - верный способ избежать проблем с несколькими источниками!

Пункт назначения (Связь -> Пункты назначения) в 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);

    }
});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...