2014-02-18 102 views
0

我正在呼叫創建來自SAPUI5的SAP Net weaver網關的服務。我已經寫了下面的代碼獲取CSRF,但我無法得到它。它要求我輸入圖像中顯示的用戶名和密碼。在SAPUI5中X-CSRF-TOKEN驗證失敗

代碼:

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

我能夠在AUTH變量來獲取CSRF-TOKEN。但它要求我進行以下身份驗證,要求我輸入SAP NET WEAVER GATEWAY的用戶名和密碼,但如果輸入了我登錄的用戶名和密碼,則不能接受。 authentication authentication

回答

3

如果你想用你的身份驗證方法,你將需要之前ODataModel實例驗證,你不能讀取的元數據更不用說獲取一個CSRF令牌,除非認證,還需要獲取之前令牌做POST。

爲什麼不將用戶名和密碼進入的ODataModel

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

如果您使用綁定功能CSRF安全令牌將被讀爲您否則,如果你想使用oModel.read一旦認證構造你可以手動做

oModel.refreshSecurityToken()