web-dev-qa-db-ja.com

Cookieを使ってAPIを取得する

私は新しいFetch APIを試していますが、Cookieに問題があります。具体的には、ログインが成功した後の将来のリクエストにはCookieヘッダーがありますが、Fetchはそのヘッダーを無視するようで、Fetchを使って行われたすべてのリクエストは承認されていません。

Fetchがまだ準備ができていないか、FetchがCookieで機能しないためですか。

私はWebpackを使って自分のアプリをビルドします。私はReact NativeでFetchを使っていますが、同じ問題はありません。

152
Khanetor

デフォルトではFetchはcookieを使用しません。クッキーを有効にするためには、これをして下さい:

fetch(url, {
  credentials: "same-Origin"
}).then(...).catch(...);
241
Khanetor

@ Khanetorの回答に加えて、クロスオリジンのリクエストを扱っている人のために:credentials: 'include'

JSONフェッチ要求のサンプル:

fetch(url, {
  method: 'GET',
  credentials: 'include'
})
  .then((response) => response.json())
  .then((json) => {
    console.log('Gotcha');
  }).catch((err) => {
    console.log(err);
});

https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

143
zurfyx

解決しました。 2つだけf。 brutforceの日々

私にとっての秘密は次のとおりです。

  1. 私はPOST/api/authに電話したところ、クッキーがうまく受け取られたことがわかりました。

  2. それから、GET/api/users /をcredentials: 'include'付きで呼び出すと401リクエストが不正確になりました。リクエストにクッキーが送信されなかったためです。

重要なのは、最初の/ api/auth呼び出しにもcredentials: 'include'を設定することです。

15
user1671599

2019年にこれを読んでいるのであれば、credentials: "same-Origin"がデフォルト値です。

fetch(url).then
1
alextrastero

.netwebapi2ユーザーの正しい答えをここに追加するだけです。

クライアントサイトがcorsとは異なるアドレスから提供されているためwebapiを使用している場合は、サーバー側の構成にSupportsCredentials=trueも含める必要があります。

        // Access-Control-Allow-Origin
        // https://docs.Microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-Origin-requests-in-web-api
        var cors = new EnableCorsAttribute(Settings.CORSSites,"*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);
0
Mark Dornian