【问题标题】:CouchDB cookie authentication does not work with jQueryCouchDB cookie 身份验证不适用于 jQuery
【发布时间】:2015-02-13 03:23:00
【问题描述】:

我在 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"]}}。谢谢!

【问题讨论】:

    标签: jquery cookies couchdb


    【解决方案1】:

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

    要设置反向代理,请在 /etc/apache2/sites-available 中创建一个名为 001-couch.conf 的文件并粘贴以下代码。然后在/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>
    

    【讨论】:

      【解决方案2】:

      我已经在我的机器上尝试了您的代码并且它可以正常工作。所以我能找到的唯一原因是你的configuration 一定是错的!也许您可以提供一些有关此的更多信息?!

      【讨论】:

      • 这是一个跨域问题。我会尽快发布答案。谢谢。
      猜你喜欢
      • 2014-07-28
      • 2015-01-25
      • 2017-04-28
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2015-04-20
      • 2018-05-06
      相关资源
      最近更新 更多