ajax - SAPUI5/AJAX,提交基本身份验证详细信息

标签 ajax sapui5 access-control sap-successfactors

我正在尝试通过 SAPUI5 应用程序中的 AJAX 调用访问 SAP Successfactors API。

我可以使用 POSTMAN 很好地访问 API,并提供基本身份验证凭据。

如何直接在 AJAX 中提供这些凭据。我尝试了许多帖子中的多种方法,但似乎没有一种方法有效。

来自 Google 开发工具的响应(控制台选项卡)

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 开发工具(网络选项卡)的响应

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);
                }

            });

最佳答案

以下问题可能是问题所在:

1) 发送前的用户名类型是否为:USERNAME@COMPANY:PASSWORD?

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"
}

在您的 Controller

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);

    }
});
});

关于ajax - SAPUI5/AJAX,提交基本身份验证详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52167302/

相关文章:

ajax - CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符

linux - 防止受 seccomp 保护的进程的子进程具有相同的 seccomp 保护?

linux - 该文件涉及什么安全问题

javascript - 将数组结果从一个 json 对象移动到另一个

routing - SAPUI5 限制页面可见性

javascript - sapui5 table onAfterRendering 导致问题

php - 限制直接页面访问

php - 在循环数据中选择选项时显示 div

java - Vaadin与Bootstrap

java - 如何使用 multipart/form-data 发布 ajax 调用?