0

私の Laravel のインストールでは、tymondesigns および by barryvdh とDingo API一緒にセットアップしました。JWT-AuthLaravel-cors

これは、ログインしてフロント エンド (別のサーバーでホストされている) からデータを取得するプロセスです。

  1. POSTへの資格証明API
  2. JWTトークンを受信しlocalStorageBearerキーを前にして格納されます。この時点以降、インターセプターはJWTトークンを使用して Authorization ヘッダーを自動的に取得および設定します。
  3. POSTリクエストは に送信され/users/meます。これは、ユーザー データを取得するための単なるルートです。username, email, permissions and messages現時点ではユーザーデータが付属しています。基本的に安心messagesEloquentモデルです。ちなみに、ユーザーデータを取得するメソッドは、 を使用してユーザーを読み取り、 を使用してデータを送り返しています。User::classhasMany(Message::class)$user = JWT::parseToken()->authenticate();Dingo$this->response()->item($user, new SelfTransformer());

したがって、この時点ではすべてがうまく機能しているように見えます。ユーザーがログインし、ユーザー オブジェクトに必要なものがすべて取り込まれ、メッセージ テーブルにメッセージが取り込まれます。

メッセージのページネーションを行っているため、現時点では一度に 1 つのメッセージしか受信していません。

ここでの問題は、この時点の後 (ユーザー オブジェクトが取得された後) に別の要求を行うと、たとえば /users/me?messages=2、メッセージの 2 ページ目を取得するようにすると、次のエラーが発生することです。 No 'Access-Control-Allow-Origin' header is present on the requested resource.

ログアウトしようとしても同じエラーが発生します。

すでに登録されているユーザーで登録しようとすると、同じエラーが発生します。

そのため、Laravel で例外がスローされるたびに、Access-Control-Allow-Originヘッダーが設定されていないように感じます。

これは私のcors構成です:

return [
    /*
     |--------------------------------------------------------------------------
     | Laravel CORS
     |--------------------------------------------------------------------------
     |

     | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
     | to accept any value.
     |
     */
    'supportsCredentials' => true,
    'allowedOrigins' => ['*'],
    'allowedHeaders' => ['Content-Type', 'Accept', 'Authorization', 'X-Requested-With', 'Origin'],
    'allowedMethods' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
    'exposedHeaders' => ['Authorization'],
    'maxAge' => 0,
    'hosts' => [],
];

Postman を使用すると、すべて正常に動作します。

また、ネットワーク タブで、常に 2 つのリクエストが設定されていることに気付きました。1つはメソッドが設定されてOPTIONSおり、2つ目は実際のリクエストです...

憂鬱になってきました…

4

2 に答える 2

0

私はわかりません。これapp/Http/routes.phpを一番上に置いて見てください。

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT');
header("Access-Control-Allow-Headers: Authorization, X-Requested-With,  Content-Type, Accept");

それが役に立てば幸い!

于 2016-03-03T13:26:46.700 に答える