Ошибка проверки X-CSRF-TOKEN в SAPUI5

Я вызываю службу create шлюза SAP Net weaver из SAPUI5. Я написал следующий код для получения CSRF, но не могу его получить. Он просит меня ввести имя пользователя и пароль, как показано на изображении.

Код:

function onSave()
{
    useroDataModel = newsap.ui.model.odata.ODataModel("proxy/sap/opu/odata/sap/ZUI_GROUP1_CREATE");

    empid = oTF2.getValue();
    empname = oTF1.getValue();
    empaddr = oTF.getValue();
    empdoj = oDP.getValue();

    uilogon();

    useroDataModel.read("/zui_group1_createCollection(im_emp_id='"+empid+"')", null, null, true, fnSuccess, fnError);

    useroDataModel.setHeaders({
         "X-CSRF-Token": "Fetch"  // auth 
    });

    function fnSuccess(data,response)
    {
        //alert(response.headers['x-csrf-token']);
        var header_xcsrf_token = response.headers['x-csrf-token'];
        //alert(header_xcsrf_token);
        var createrequestdata = {
            im_emp_id : empid,
            im_emp_name : empname(),
            im_emp_addr : empaddr(),
            im_emp_doj : empdoj()
        };

        useroDataModel.setHeaders({
             "X-Requested-With": "XMLHttpRequest",                         
             "Content-Type": "application/atom+xml",  
             "DataServiceVersion": "2.0",   
            "Accept": "application/atom+xml,application/atomsvc+xml,application/xml",  
             "X-CSRF-Token": header_xcsrf_token   
        });

        useroDataModel.create("/zui_g2_createCollection", createrequestdata, null, fnS, fnE);

        function fnS(response){
             if(response.ex_status == "Entry Created.")
                 {
                 alert("Created.");
                 }
             else
                {
                 alert("Failed.");
                }
         }
         function fnE(Error){
             alert("error in create"+Error.message);
         }

    }

    function fnError(oError)
    {
        alert("Error in read"+oError.message);
    }
}

function uilogon()
{
    var tok  = "username" + ':' + "password";  
    var hash = btoa(tok);  
    auth = "Basic" + hash; 
//  alert(auth);
    // Save to Local Storage  
//  $.sap.require("jquery.sap.storage");  
//  var UI5Storage = $.sap.storage(jQuery.sap.storage.Type.session);  
//  UI5Storage.remove("Auth");  
//  UI5Storage.put("Auth",auth);  
    useroDataModel.setHeaders({
        //'Accept-Encoding': "gzip",
        "Authorization" : auth});
//  alert("dne");
}

Я могу получить CSRF-TOKEN в переменной auth. Но он запрашивает у меня следующую аутентификацию, в которой просит ввести имя пользователя и пароль SAP NET WEAVER GATEWAY, но если я ввожу имя пользователя и пароль, через которые я вошел в систему, он не принимает. аутентификацияаутентификация


person Ash    schedule 18.02.2014    source источник


Ответы (1)


Если вы хотите использовать свой метод аутентификации, вам нужно будет пройти аутентификацию до создания экземпляра ODataModel, вы не можете прочитать метаданные, не говоря уже о получении токена CSRF, если вы не прошли аутентификацию, также вам необходимо получить токен до выполнения POST.

Почему бы не передать имя пользователя и пароль в конструктор ODataModel

var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, bJSON, sUser, sPwd);

после аутентификации, если вы используете функцию привязки, токен безопасности CSRF будет прочитан для вас, иначе, если вы хотите использовать oModel.read, вы можете сделать это вручную

oModel.refreshSecurityToken()
person Jasper_07    schedule 18.02.2014