0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

lumenのAPIをクロスサイトで実行できるようにする

Posted at

問題

lumen(5.5)で作ったAPIをajaxなどでクロスドメインで実行しようとしても実行されない。

原因

ブラウザからpostやgetでAPIを実行するとまず、optionsでリクエストを投げます。そこでAPIがちゃんとアクセスできるかを確認してます。この機能のことをプリフライトリクエストと呼ぶらしいです。
そのレスポンスで200が返ってきたら、実際に実行したいpostやgetのAPIが実行されます。
ただレスポンスで200以外が返ってきた場合は、postやgetのAPIが実行されない。

laravelの機能で、optionsのリクエストを受けるとrouterに達する前に、405で返してしまいます。

解決策

以下のファイルを\app\Http\Middlewareに作成する。


<?php

namespace App\Http\Middleware;

use Closure;

class CorsMiddleware
{
    public function handle($request, Closure $next)
    {
        if($request->isMethod('OPTIONS')) {
            return response('', 200);
        }
    }
}

\bootstrap\app.phpに以下を追加する。


$app->middleware([
    App\Http\Middleware\CorsMiddleware::class
 ]);

(【Lumen】Lumen製APIに対してクロスドメインアクセスを行う(CORS)の引用)

これを追加うすることでrequestがrouterに届くよりも前に、requestに対してCorsMiddlewareで処理をすることができる。なのでCorsMiddlewareでリクエストのメソッドがOPTIONSだった場合は200を返す処理を追加しています。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?