如何在 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
}
});
我正在寻找在 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
.
不是 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
}
});