尝试使用简单的javascript客户端测试新的datasnap服务器。它一直工作,直到我打开服务器上的授权,然后我不断收到401错误,onAuthorization事件没有传入任何用户名或密码,他们总是空白。
$(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 :(得分:0)
在您引用的来源中,您禁止(注释掉)授权部分
//xhr.setRequestHeader ("Authorization", make_base_auth (userName, password));
您能在客户端和服务器之间显示真实的HTTP流量日志吗?
实际上有两个日志 - 服务器和经过身份验证的Delphi客户端之间 - 以及服务器和失败的JS客户端之间。然后就会看到差异......
答案 1 :(得分:0)
没有解决,花了很长时间试图解决这个问题。最后只需要一个测试客户端,并得到一个工作的PHP客户端非常快。看起来如此接近但从来没有完全确定,但足以保持goin thanx无论如何
答案 2 :(得分: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;