[英]How to use transactional Cypher HTTP endpoint and new REST API Authentication and Authorization in Neo4j 2.2.x with JQuery
我正在寻找一个代码示例,该示例使用新的REST API身份验证和授权参数在Neo4j 2.2.x 事务性Cypher HTTP端点上使用JQuery创建REST POST请求。
在Neo4j 2.2版本之前,我使用Legacy Cypher HTTP端点(不建议使用)通过以下代码执行Cypher查询:
$.post("http://localhost:7474/db/data/transaction/commit",
{
"query": query,
"params": {}
}, "json")...
但是我想转到2.2并使用带有用户身份验证参数的事务终结点。
我找不到正确的标头和参数组合来创建这样的请求。 这就是为什么我要寻找一个代码示例。
最好是使用跨域请求的示例,但是在相同域上的示例也会有所帮助。
为了进行身份验证,您需要为请求提供其他HTTP标头:
Authorization: Basic realm="Neo4j" <base64>
其中<base64>
是username:password
的base64编码的字符串。
不是jquery忍者,但我想最简单的方法是使用ajax默认值设置授权标头:
$.ajaxSetup({
headers: { "Authorization": 'Basic realm="Neo4j' <base64>'}
});
应用此默认值后,上面的$.post
应该可以工作。
该问题已在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
}
});
授权意味着浏览器将发送一个预检OPTIONS请求,该请求不嵌入授权标头。
这就是最著名的CORS。
当前,Neo4j服务器不使用适当的Access-Control-Allow-Header答复OPTIONS请求。 此功能已在源代码中实现,并将随GA版本一起提供,我希望本周发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.