我有一个节点应用程序,它使用 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/