CouchDB cookie身份验证不适用于jQuery

时间:2015-02-03 13:39:14

标签: jquery cookies couchdb

我在localhost(127.0.0.1)上有一个启用了CORS的CouchDB服务器,我正在使用couch jQuery库从Apache服务器提供的页面访问它。我尝试按如下方式进行身份验证:

$.couch.urlPrefix = "http://127.0.0.1:5984";    
    $.couch.login({
    name:     "user1",
    password: "user1password",                          
    success: function(data) {    
        $.couch.session({
            success: function(data) {
                console.log(JSON.stringify(data));             
             }                 
         });    
     }
 });

$.couch.login()$有效(我收到了AuthSession个Cookie和回复{"ok":true,"name":"user1","roles":["operator"]})。问题是:任何要求用户登录的后续请求都会失败,因为浏览器不会发送cookie(Chrome / Firefox,也在不同的计算机上)。显然,对$.couch.session()的响应就像没有用户登录一样:{"ok":true,"userCtx":{"name":null,"roles":[]},"info":{"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"]}}。谢谢!

2 个答案:

答案 0 :(得分:2)

我在意识到大多数浏览器没有设置源自不同域的cookie之后解决了这个问题。 CouchDB JQuery插件here的事实参考在本文开头提到了这一点。我选择在Apache中设置反向代理,这样所有定向到127.0.0.1:80/couch/的请求都将转换为CouchDB服务器所在的127.0.0.1:5984。包含会话身份验证cookie的CouchDB响应将由apache转换,以便客户端看到答案来自原始目标。

要设置反向代理,请在名为001-couch.conf的/etc/apache2/sites-available中创建一个文件并粘贴下面的代码。然后在/etc/apache2/sites-enabled中创建指向此文件的符号链接。默认反向代理可能会干扰您的新配置。要删除它们,您可以安全地删除其他符号链接。

<VirtualHost *:80>
   DocumentRoot /var/www/html/
   AllowEncodedSlashes On
   ProxyRequests Off
   KeepAlive Off

   <Proxy *>
      Order deny,allow
      Deny from all
      Allow from all
   </Proxy>

   #--- Filter to CouchDB ---
   # Translate request to CouchDB
   ProxyPass /couch/ http://localhost:5984/ 
   # Translate response from CouchDB 
   ProxyPassReverse /couch/ http://localhost:5984/ 

   ErrorLog ${APACHE_LOG_DIR}/couchdb.localhost-error_log
   CustomLog ${APACHE_LOG_DIR}/couchdb.localhost-access_log combined
</VirtualHost>

答案 1 :(得分:0)

我已经在我的机器上尝试了你的代码并且它正在运行。所以我能找到的唯一原因是你的configuration一定是错的!也许你可以提供一些有关这方面的进一步信息?!