如何在 Neo4j 2.2.x 和 JQuery 中使用事务性 Cypher HTTP 端点和新的 REST API 身份验证和授权

How to use transactional Cypher HTTP endpoint and new REST API Authentication and Authorization in Neo4j 2.2.x with JQuery

我正在寻找在 Neo4j 2 上使用 JQuery 创建 REST POST 请求的代码示例。2.x Transactional Cypher HTTP endpoint with new REST API Authentication and Authorization 参数。

在 Neo4j 2.2 版本之前,我使用旧版 Cypher HTTP 端点(已弃用)通过以下代码执行 Cypher 查询:

$.post("http://localhost:7474/db/data/transaction/commit",
{
    "query": query,
    "params": {}
}, "json")...

但我想转到 2.2 并使用带有用户身份验证参数的事务端点。

我找不到正确的 headers 和参数组合来创建这样的请求。这就是我寻找代码示例的原因。

最好是使用跨域请求的示例,但在同一域上的示例也会有所帮助。

对于身份验证,您需要为您的请求提供额外的 HTTP header:

Authorization: Basic realm="Neo4j" <base64>

其中 <base64>username:password.

的 base64 编码字符串

不是 jquery 忍者,但我想最简单的方法是使用 ajax 默认设置授权 header:

$.ajaxSetup({
   headers: { "Authorization": 'Basic realm="Neo4j' <base64>'}
});

应用此默认值后,上面的 $.post 应该可以工作。

授权意味着浏览器将发送未嵌入授权的预检选项请求headers。

这就是众所周知的 CORS。

目前 Neo4j 服务器不使用适当的 Access-Control-Allow-Headers 回复 OPTIONS 请求。 此功能已在源代码中实现,并将与我希望本周发布的 GA 版本一起发布。

该问题已在 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
    }
});