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

时间:2015-02-24 15:26:46

标签: javascript jquery rest authentication neo4j

我正在寻找一个代码示例,使用带有新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是使用跨域请求的示例,但同一域上的示例也会有所帮助。

3 个答案:

答案 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发布一起发布,我希望本周能够发布。