3

我有一个节点应用程序,它使用 CouchDB 作为数据库,在客户端使用 PouchDB。要登录,需要向节点服务器发送一个请求,该服务器使用 CouchDB 实例验证用户的凭据,然后再将 cookie 发送回客户端。问题是,在重新启动浏览器并登录后,当 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 令牌,而是在用户收到 401 提示后 CouchDB 提供给它的 cookie。有没有办法解决这个问题?

提前致谢。

4

2 回答 2

4

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

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

请注意,您需要将其设置为same-origin适当的位置,或者include用于跨源/无源请求。

于 2018-07-10T11:34:36.407 回答
2

实际上,只要在客户端设置了 cookie,PouchDB 就会自动获取身份验证。我有一个插件可以证明这一点:https ://github.com/nolanlawson/pouchdb-authentication 。您可以使用此插件直接与您的 CouchDB 对话,它肯定会起作用。也许您的 Node 代理没有在 PouchDB 和 CouchDB 之间传递 cookie?

于 2014-06-02T16:26:12.263 回答