jquery - CouchDB cookie 身份验证不适用于 jQuery

标签 jquery cookies couchdb

我在本地主机 (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"]})。问题是:任何要求用户登录的后续请求都会失败,因为浏览器(Chrome/Firefox,也在不同的机器上)没有发送 cookie。显然,对 $.couch.session() 的响应就像没有用户登录一样:{"ok":true,"userCtx":{"name":null,"角色":[]},"info":{"authentication_db":"_users","authentication_handlers":["oauth","cookie","default"]}}。谢谢!

最佳答案

在意识到大多数浏览器不会设置源自不同域的 cookie 后,我修复了该问题。 CouchDB JQuery 插件的实际引用 here文章开头就提到了这一点。我选择在 Apache 中设置反向代理,这样所有定向到 127.0.0.1:80/couch/ 的请求都会被转换为 127.0.0.1:5984,其中CouchDB 服务器驻留。来自 CouchDB 的响应(包含 session 身份验证 cookie)将由 apache 进行转换,这样客户端就会看到来自原始目的地的答案。

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

<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>

关于jquery - CouchDB cookie 身份验证不适用于 jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28300331/

相关文章:

c# - 设置过期的 HttpCookie 返回 DateTime.MinValue

browser - 浏览器如何将 cookie 传输到服务器?

CouchDB 返回 "does not eval to a function"

mapreduce - CouchDB 返回 "wrong"total_rows

javascript - jQuery UI - 当 droppable 必须删除拖动的元素时怎么办?

javascript - jQuery/Dojo - 如何将 jQuery 与 Dojo 工具包一起使用

javascript - jquery悬停和点击冲突

Jquery 菜单 - 改变滑动功能

javascript - 未捕获的异常 : unknown (can't convert to string)

javascript - CouchDB 和 Cloudant 安全