У меня есть бэкэнд Laravel и интерфейс React.Для разработки React работает на localhost:3000
и Laravel на localhost:8080
, поэтому мне пришлось разрешить Cors.
Я успешно установил Passport и могу Использовать мой API с JavaScript ,
Но при каждом запросе я должен включать X-CSRF-TOKEN для доступа к защищенным маршрутам API, что работает, но для разработки я бы хотел отключить CSRF-Protection для API.
Я уже пытался добавить маршрут /api
в массив except
в VerifyCsrfToken
и удалил промежуточное ПО из Kernel.php
, но это, похоже, не меняет того факта, что мне все еще нужно отправить токен CSRF.
Я использую Laravel 5.8 и использую JavaScript-выборку для выполнения запросов.
VerifyCsrfToken:
protected $except = [
'/api/*'
];```
Я закомментировал VerifyCsrfToken в ядре:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
Пример маршрута API:
Route::get('test', function() {
return response()->json(['success' => 'Hello!']);
})->middleware('auth:api');
Как я пытаюсь получить доступ к API:
const checkStatus = (response) => {
console.log(response);
if (response.ok) {
return response;
} else {
const error = new Error(response.statusText);
error.response = response;
throw error;
}
}
const parseJSON = res => res.text();
const Fetcher = {
get: (ressource) => {
return fetch(CONSTANTS.API_URL + ressource, {
method: 'GET',
mode: 'cors',
headers: {
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
//'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
},
credentials: 'include'
})
.then(checkStatus)
.then(parseJSON)
},
post: (ressource, data) => {
return fetch(CONSTANTS.API_URL + ressource, {
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
//'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
},
credentials: 'include',
body: data
})
.then(checkStatus)
.then(parseJSON)
}
}