我有一个节点应用程序,它使用 CouchDB 作为数据库,在客户端使用 PouchDB。要登录,将向节点服务器发送请求,节点服务器使用 CouchDB 实例对用户的凭据进行身份验证,然后将 cookie 发送回客户端。问题是,重新启动浏览器并登录后,当 Pouch 尝试连接到 DB 时,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。有什么办法可以解决这个问题吗?
提前致谢。
你可能需要拦截并修改PouchDB的fetch
调用添加credentials https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters选项,您可以在第一次构造数据库对象时轻松执行此操作:
db = new PouchDB('https://yourcouch/yourdb', {
fetch: (url, opts) => fetch(url, { ...opts, credentials: 'include' /* OR 'same-origin' */ })
});
请注意,您需要将其设置为same-origin
在适当的情况下,或include
对于跨源/无源请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)