Исключение TokenMismatchException в VerifyCsrfToken-Laravel 5.1
Я создаю REST API, используя Laravel 5.1 и я получаю эту ошибку:
TokenMismatchException in VerifyCsrfToken.php line 53:
вот мой маршруты.на PHP:
Route::controller('city' , 'CityController' );
CityController:
class CityController extends Controller
{
public function postLocalities()
{
$city = Input::get('cityName');
$response = $city;
return $response;
}
}
здесь Stacktrace ошибки, когда я нажимаю URL-адрес http://localhost:8000/city/localities?cityName=Бангалор С методом POST.
TokenMismatchException in VerifyCsrfToken.php line 53:
in VerifyCsrfToken.php line 53
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'),
array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->IlluminatePipeline{closure}(object(Request)) in
ShareErrorsFromSession.php line 54
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'),
array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->IlluminatePipeline{closure}(object(Request)) in
StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'),
array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->IlluminatePipeline{closure}(object(Request)) in
AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'),
array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->IlluminatePipeline{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'),
array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->IlluminatePipeline{closure}(object(Request)) in
CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'),
array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->IlluminatePipeline{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54
at require_once('C:Usersbetaworks02DocumentsgharbhezoBackendpublicindex.php') in server.php line 21
3 ответов
Если вы создаете API, лучше всего разместить crsf middle ware на основе каждого маршрута, а не размещать его как глобальное промежуточное ПО. Чтобы сделать его промежуточным по маршруту, перейдите в " / app / Http / ядро.в PHP файл".
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
//comment out to avoid CSRF Token mismatch error
// 'App\Http\Middleware\VerifyCsrfToken',
];
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'cors' => 'App\Http\Middleware\CorsMiddleware',
'api' => 'App\Http\Middleware\ApiMiddleware',
'csrf' => 'App\Http\Middleware\VerifyCsrfToken'// add it as a middleware route
теперь вы можете разместить его на маршрутах, где вам это нужно, например
Route:: get ('someRoute', array ('uses' = > 'HomeController@getSomeRoute', 'middleware' = > 'csrf'));
для вашего случая, когда вам не нужна CSRF token matching теперь должен работать нормально.
вам не нужно полностью переопределять токен CFSR из вашего приложения. В папке App/Http/Midlleware перейдите в раздел VerifyCsrfToken.php и включите свой API-маршрут в исключение следующим образом:
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/*',
];
* показывает для всех маршрутов внутри вашего API.
Я получал ту же ошибку, но со всеми предупреждениями о переопределении проверки CSRF не хотел изменять эти настройки.
в конце концов я обнаружил, что мой драйвер сеанса в /config / session.php был по умолчанию memcached, и поскольку я был на сервере разработки, мне нужно было переопределить переменную session_driver env с "файлом", чтобы использовать сеанс в /storage/framework/sessions.
/.env
SESSION_DRIVER = file