3

データベースに CouchDB を使用し、クライアントに PouchDB を使用するノード アプリがあります。ログインするには、リクエストがノード サーバーに送信されます。ノード サーバーは、Cookie をクライアントに送信する前に、CouchDB インスタンスでユーザーの資格情報を認証します。問題は、ブラウザを再起動してログインした後、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 を使用しています。これを回避する方法はありますか?

前もって感謝します。

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 に答える