我正在寻找一个代码示例,使用带有新Transactional Cypher HTTP endpoint参数的Neo4j 2.2.x REST API Authentication and Authorization上的JQuery创建REST POST请求。
在Neo4j 2.2版本之前,我使用Legacy Cypher HTTP端点(已弃用)使用以下代码执行Cypher查询:
$.post("http://localhost:7474/db/data/transaction/commit",
{
"query": query,
"params": {}
}, "json")...
但我想转到2.2并使用带有用户身份验证参数的事务端点。
我无法找到用于创建此类请求的正确标头和参数组合。这就是我正在寻找代码示例的原因。
Best是使用跨域请求的示例,但同一域上的示例也会有所帮助。
答案 0 :(得分:2)
对于身份验证,您需要为请求提供额外的HTTP标头:
Authorization: Basic realm="Neo4j" <base64>
其中<base64>
是base64编码的username:password
字符串。
不是jquery忍者,但我想最简单的方法是使用ajax默认设置授权标头:
$.ajaxSetup({
headers: { "Authorization": 'Basic realm="Neo4j' <base64>'}
});
如果应用此默认设置,则上述$.post
应该有效。
答案 1 :(得分:1)
该问题已在2.2.0-RC01中修复,我可以使用事务性Cypher HTTP端点进行身份验证,使用以下示例代码:
$.ajaxSetup({
headers: {
// Add authorization header in all ajax requests
// bmVvNGo6cGFzc3dvcmQ= is "password" base64 encoded
"Authorization": "Basic bmVvNGo6cGFzc3dvcmQ="
}
});
$.ajax({
type: "POST",
url: "http://localhost:7474/db/data/transaction/commit ",
dataType: "json",
contentType: "application/json;charset=UTF-8",
data: JSON.stringify({"statements": [{"statement": "MATCH (n) RETURN n LIMIT 10"}]}),
success: function (data, textStatus, jqXHR) {
// use result data...
},
error: function (jqXHR, textStatus, errorThrown) {
// handle errors
}
});
答案 2 :(得分:0)
授权意味着浏览器将发送不嵌入授权标头的预检OPTIONS请求。
这就是众所周知的CORS。
目前,Neo4j服务器不会使用相应的Access-Control-Allow-Headers回复OPTIONS请求。 此功能已在源代码中实现,并将随GA发布一起发布,我希望本周能够发布。