我想通过使用couchdb提供的访问令牌连接到我的远程couchdb数据库,这可以通过发送标题来完成:
Cookie: AuthSession={COUCHDB_TOKEN}
用curl做这个没问题。但是使用带有以下代码的pouchDB:
new PouchDB(url, {
ajax: { headers: {'Cookie': 'AuthSession=couchdb_token'} }
});
我收到了错误:
Refused to set unsafe header "Cookie"
有没有办法将此令牌放入标题而不会出现此错误?
我已经完成了研究但是无法找到一种方法来使用pouchdb与远程数据库同步而不提供用户名&密码,但那些不应该存储在客户端那么..
答案 0 :(得分:3)
问题是浏览器阻止设置'Cookie'请求标头,因为此标头由浏览器直接管理。您无法设置任何these headers。
您应该使用_session端点对CouchDB进行身份验证。此端点将使用Set-Cookie标头进行响应,该标头在浏览器中建立AuthSession cookie,并在下次调用时将其发送回CouchDB。
我通常做的是在CouchDB中配置ProxyAuthentication(注意:在CouchDB 2.0中已经破解),然后在我的应用程序中使用自定义身份验证头进行身份验证。这种方法有点复杂,但允许您将应用程序身份验证令牌与CouchDB一起使用。 ---编辑---
请检查您是否拥有ProxyAuthentication enabled。 身份验证令牌的逻辑是here。 您不需要调用_session端点,只需使用正确的逻辑构建令牌。
- EDIT2 -
查看CouchDB代码,以这种方式生成令牌:
“X-Auth-CouchDB-Token”:hex_hmac_sha1(secret,“user@test.org”)
其中:
您应该在客户端重现此逻辑。