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

问题描述 投票:2回答:2

我有一个节点应用程序,它在客户端上使用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。有没有办法解决这个问题?

提前致谢。

javascript couchdb pouchdb
2个回答
1
投票

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


3
投票

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

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

请注意,您需要在适当的位置将其设置为same-origin,或者将include设置为交叉原点/无原始请求。

© www.soinside.com 2019 - 2024. All rights reserved.