2016-03-29 5 views
1

Попытка протестировать новый сервер datasnap с помощью простого javascript-клиента. Он работает до тех пор, пока я не включу авторизацию на сервере, тогда я продолжаю получать ошибки 401, и событие onAuthorization не передается ни в какие имена пользователей или пароли, они всегда пусты.Проверка Delphi Datasnap с помощью javascript-клиента

$(document).ready(function(e) { 

var jsonStr = { 
"ContactName": "smith, anthony", 
"FirstName": "anthony", 
"LastName": "smith" 
    }; 


    function make_base_auth(user, password) { 
var tok = user + ':' + password; 
var hash = btoa(tok); 
return "Basic " + hash; 
    } 

    var userName = "admin"; 
    var password = "admin"; 
    var authStr = convertStringToBase64(userName + ":" + password); 
    var authObj = '{"authentication":authStr}'; 


    $.ajax({ 
url: "http://127.0.0.1:8086/api/services/Customers/RegisterCustomer", 
headers: { 
    "Authorization": make_base_auth(userName, password) 
}, 
beforeSend: function(xhr) { 
    xhr.setRequestHeader("Content-Type", "application/json"); 
    xhr.setRequestHeader("Accept", "application/json"); 
    //xhr.setRequestHeader ("Authorization", make_base_auth (userName, password)); 
}, 
crossDomain: true, 
type: "POST", 
dataType: "json", 
data: JSON.stringify(jsonStr), 

success: function(result, status, jqXHR) { 
    $("preerror").text("IT WORKED"); 
    var jsonStr = result; 
    var jsonObj = JSON.parse(jsonStr); 
    var jsonPretty = JSON.stringify(jsonObj, null, '\t'); 

    $("pre").text(jsonPretty); 
}, 
error(jqXHR, textStatus, errorThrown) { 
    $("pre").text("FAIL"); 
} 
    }); 

}); 
+0

попробовать стандартный способ: сделать URL 'HTTP: // имя пользователя: пароль @ имя_сервера/путь ' –

ответ

0

В вашем цитируемом источнике вы запрещены (закомментирована) разрешение часть

//xhr.setRequestHeader ("Authorization", make_base_auth (userName, password)); 

Вы можете показать реальный HTTP журнал трафика между клиентом и сервером?

Фактически два журнала - между сервером и работающим аутентифицированным клиентом Delphi - и между сервером и неудавшим JS-клиентом. Тогда будет видна разница ....

как https://stackoverflow.com/a/17549592/976391

0

Не решить, провела Waaaay слишком долго пытается решить эту. В итоге нужен был только тестовый клиент, и он быстро работал с рабочим клиентом php. Показалось так близко еще никогда не работал не совсем уверен, но получил достаточно, чтобы держать идешь Thanx в любом случае

0

попробовать поставить это в WebModule

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; 
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
begin 
    Response.SetCustomHeader('access-control-allow-origin','*'); 
    if FServerFunctionInvokerAction <> nil then 
    FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker; 
end; 
Смежные вопросы