繁体   English   中英

如何在带有JQuery的Neo4j 2.2.x中使用事务性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

我正在寻找一个代码示例,该示例使用新的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM