5

我试图弄清楚如何http://test:test@localhost:5984/mydb在 CouchDB 1.3.1 中使用基本身份验证(即)。

在蒲团:

  • 我创建一个数据库mydb
  • 我为它设置了两个用户。在安全选项卡中:一位具有读取权限的成员["test"]和一位管理员["admin"]

然后我只是测试连接。

使用卷曲:

curl GET http://localhost:5984/mydb

未经授权退货401,这很好。

curl GET http://test:test@localhost:5984/mydb

返回200,所以一切都使用 curl 按预期工作。

使用浏览器或 $.ajax:

两者都返回401url http://test:test@localhost:5984/mydb

所以,问题:

  • curl GET使用或使用(或浏览器)有什么区别$.ajax GET
  • 我是否缺少 CouchDB 或其他允许执行此类身份验证的配置?
4

2 回答 2

5

它被称为跨域资源共享。基本上,浏览器可以进行的 ajax 调用是有限制的。这是一项安全功能,不允许浏览器从任何地方任意加载资源。

在单击加载任意资源之后,您似乎希望能够做到这一点。但是,如果任何旧的 javascript 程序可以加载任何其他资源,那么它可能会被劫持以注入代码或窃取信息。

CURL 通过不受 CORS 限制来解决这个问题。它只是提出您想要的任何旧请求。

此外,您可以通过查询 localhost:5984/_session 来启动会话,此时您的所有以下查询都将与安全令牌 cookie 一起发送。jQuery.couch是一些常用功能的不错的基础资源。

于 2013-09-10T19:38:43.947 回答
2

您忘记将身份验证信息放在标题中。试试看!

 $(document).ready(function () {
     $.ajax({
      url: 'http://127.0.0.1:5984/mydb', //Your api url
      type: 'GET', //type is any HTTP method
      xhrFields: {
        withCredentials: true
      },
       headers: {
                'Authorization': 'Basic ' + btoa('MyUser:MyPassWord')
            },
            success: function (response) {
                var resposta = response            
            },
            error: function (err) {
                var t = err.responseText;
                console.log("Erro de requisição: " + err.responseText);
            }
        });
    });

来源:https ://zinoui.c​​om/blog/ajax-basic-authentication

于 2019-01-27T15:13:26.097 回答