Larvel 5.8: промежуточное ПО игнорируется при вызове маршрута из JavaScript, но не из браузера - PullRequest
1 голос
/ 06 мая 2019

У меня есть промежуточное ПО 'cors', которое просто делает это

public function handle($request, Closure $next)
{
    // return response()->json(['message' => 'Not Found.'], 404);
    if (config('app.env') !== 'production') {
        return $next($request)
                ->header("Access-Control-Allow-Origin", "*")
                ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    } else  {
        return $next($request);
    }

}

Я добавил промежуточное ПО в routes/api.php таким образом:

<?php

// Rotte /api/v1
Route::group(['prefix' => 'v1', 'middleware' => ['cors'] ], function () {

    ... wrapping all /api/v1 routes

}

Когда я посещаю URLиз своего браузера я вижу в опциях разработчика, что

enter image description here

Но, когда javscript вызывает тот же URL, предварительный запрос 'option' завершается неудачно

Доступ к XMLHttpRequest в 'https://project.local/api/v1/customer' от источника' https://localhost:3000' заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет 'Access-ControlЗаголовок -Allow-Origin 'присутствует в запрашиваемом ресурсе.

Что я делаю не так?

Обратите внимание, что запрос laravel для перечисления моих маршрутов фактически показывает, что cors

php artisan route:list --path api/v1/
+--------+-----------+-------------------------------+------------------+----------------------------------------------------------+---------------------+
| Domain | Method    | URI                           | Name             | Action                                                   | Middleware          |
+--------+-----------+-------------------------------+------------------+----------------------------------------------------------+---------------------+
|        | GET|HEAD  | api/v1/customer               | customer.index   | App\Http\Controllers\CustomerController@index            | api,cors,jwt.verify |
|        | POST      | api/v1/customer               | customer.store   | App\Http\Controllers\CustomerController@store            | api,cors,jwt.verify |
|        | GET|HEAD  | api/v1/customer/{customer}    | customer.show    | App\Http\Controllers\CustomerController@show             | api,cors,jwt.verify |
|        | PUT|PATCH | api/v1/customer/{customer}    | customer.update  | App\Http\Controllers\CustomerController@update           | api,cors,jwt.verify |
|        | DELETE    | api/v1/customer/{customer}    | customer.destroy | App\Http\Controllers\CustomerController@destroy          | api,cors,jwt.verify |

1 Ответ

1 голос
/ 06 мая 2019

Пожалуйста, обновите ваше промежуточное ПО с помощью дополнительных заголовков,

 if (config('app.env') !== 'production') {
        return $next($request)
                ->header("Access-Control-Allow-Origin", "*")
                ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
                ->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-XSRF-TOKEN, X-Requested-With');

Это должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...