javascript - 使用 CouchDB 的 PouchDB 和 Cookie 身份验证实际上并未登录用户

标签 javascript couchdb pouchdb

我有一个节点应用程序,它使用 CouchDB 作为数据库,并在客户端使用 PouchDB。为登录,请求被发送到节点服务器,节点服务器在将 cookie 发送回客户端之前使用 CouchDB 实例验证用户的凭据。问题是,在重新启动浏览器并登录后,当 Pouch 尝试连接到数据库时,CouchDB 会发送 401 Unauthorized 响应,并且浏览器会弹出其默认登录弹出窗口。即使 AuthSession cookie 在浏览器中,也会发生这种情况。

Chrome 中的完整错误是:Failed to load resource: the server responded with a status of 401 (Unauthorized) http://localhost:5984/user/?_nonce=rItPZR1fgbHrwn0a

在 Chrome 弹出框中输入用户凭据并刷新页面后,它会正常加载。转到列出的页面并输入用户凭据会提供有关用户的各种元数据。

我假设发生这种情况是因为 PouchDB 实际上并没有使用节点服务器发送的 AuthSession token ,而是在用户收到 401 提示后 CouchDB 提供给它的 cookie。有什么办法可以绕过这个?

提前致谢。

最佳答案

您可能需要拦截和修改 PouchDB 的 fetch 调用以添加 credentials选项,您可以在首次构造数据库对象时轻松执行此操作:

db = new PouchDB('https://yourcouch/yourdb', {
    fetch: (url, opts) => fetch(url, { ...opts, credentials: 'include' /* OR 'same-origin' */ })
});

请注意,您需要在适当的地方将其设置为 same-origin,或者为跨源/无源请求设置 include

关于javascript - 使用 CouchDB 的 PouchDB 和 Cookie 身份验证实际上并未登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23986912/

相关文章:

couchdb - 速率限制 - 将 CouchDB 与 Redis 一起使用或单独使用 CouchDB

javascript - PouchDB createIndex 抛出 500 错误代码

javascript - 在 Chrome 中使用 indexedDB 而不是 webSQL 不再工作

javascript - 关于多功能应用程序的 State 与 Flux Stores 的问题

javascript - 为数组原型(prototype)添加了新方法

Javascript/HTML5 canvas bug 变量, "Not defined"但已定义

javascript - 在没有 "wrapping" key 的情况下通过 axios POST 数据?

couchdb - 如何查询发出复杂键的 CouchDB View ?

javascript - 代码没有按顺序执行

javascript - Fiddle 在单击链接时在结果面板中显示 JSFiddle 登录(而不是正常运行)