couchDB 401错误

时间:2015-01-18 15:03:14

标签: javascript angularjs couchdb

我有一个名为“guestbook”的couchDB数据库。我首先使用下面的代码将用户添加到“_users”数据库:

$scope.submit = function(){

var url = "https://sub.iriscouch.com/_users/org.couchdb.user:" + $scope.name;
console.log(url);

$http({

    url: url,
    method: "PUT",
    data: {name : $scope.name, 
           password: $scope.pass,
           roles: [],
           type: "user"
          },
    withCredentials: true,
    headers: {"Authorization": auth_hash(adminUsername, adminPass)}
})

.success(function(data, status, headers, config){

    console.log(headers);
    console.log(config);
 });
 }

将用户添加到_users后,我使用Futon将该用户添加为我的“留言簿”_security文档。

之后,我尝试使用该用户名和密码(作为“guestbook”_security 的成员添加)来获取“留言板”数据库中的所有文档。 请参阅以下代码:

   $scope.login = function(){
   var url = "https://sub.iriscouch.com/guestbook/_all_docs";

   $http({
    url: url,
    method: 'GET',
    params: {
        include_docs: true,

    },
    withCredentials: true,
    headers: {"Authorization": auth_hash($scope.uname, $scope.upass)}
})

.success(function(data, status, headers, config){

    $scope.book = data.rows;
    console.log($scope.book);

});
}

function auth_hash(username, password)
{
     return "Basic" +btoa(username + ":" + password);
}

但每次我厌倦访问“_all_docs”时,我都会收到401未经授权的错误。我用来访问的用户名已作为成员添加到留言簿数据库的_security文档中。

任何人都可以提供帮助。我做错了什么。

2 个答案:

答案 0 :(得分:0)

您是否已将org.couchdb.user前缀的用户名添加到_security对象?

我可以轻松理解您的代码,但没有看到明显的错误。我建议您使用Postman(Chrome应用程序)或类似方法测试您的API调用,以了解问题是由客户端还是服务器端引起的。

答案 1 :(得分:0)

401表示Couch无法登录您的用户,而不是允许他们访问数据库。

在编写代码示例时可能会出现复制/粘贴错误,但它看起来像是你的行:

return "Basic" +btoa(username + ":" + password);

Basic和返回字符串中的哈希之间缺少空格:

return "Basic " +btoa(username + ":" + password);

这意味着您的Authorization标题不正确。

但是,您的第一个代码块似乎成功使用了相同的功能,因此我抓住了吸管。