CouchDB cookie 身份验证不适用于 jQuery
CouchDB cookie authentication does not work with jQuery
我在本地主机 (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"]}}
。谢谢!
我已经在我的机器上试过你的代码,它工作正常。所以我能找到的唯一原因是你的 configuration 一定是错的!也许你可以提供一些关于这方面的进一步信息?!
在意识到大多数浏览器不会设置源自不同域的 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
中为这个文件创建一个符号 link。默认反向代理可能会干扰您的新配置。要删除它们,您可以安全地删除其他符号 links.
<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>
我在本地主机 (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"]}}
。谢谢!
我已经在我的机器上试过你的代码,它工作正常。所以我能找到的唯一原因是你的 configuration 一定是错的!也许你可以提供一些关于这方面的进一步信息?!
在意识到大多数浏览器不会设置源自不同域的 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
中为这个文件创建一个符号 link。默认反向代理可能会干扰您的新配置。要删除它们,您可以安全地删除其他符号 links.
<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>