Laravel5.2 不需要的 VerifyCsrfToken
Laravel5.2 Unwanted VerifyCsrfToken
我设置了新的 L5.2,更改后的路由文件如下所示:
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::group(['middleware' =>'api', 'prefix' => '/api/v1'], function () {
Route::post('/api/v1/login', 'Api\V1\Auth\AuthController@postLogin');
});
当我去找邮递员并制作 POST: http://kumarajiva.dev/api/v1/login 我得到: TokenMismatchException in VerifyCsrfToken.php line 67
但是我的内核文件看起来像这样:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
我没有改变任何东西。路由 'login' 在 'api' 中间件组中(不是 'web',VerifyCsrfToken 所在的位置),但令人惊讶的是我遇到了以上错误。所以我想知道 - wtf?它是如何工作的? 'web' 中间件组是否始终执行(针对每个请求)?
默认情况下,所有路由似乎都包含在 'web' 组中。
在RouteServiceProvider
中有这个函数。
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
如果您希望特定的 uri 不检查 CSRF 令牌,请转至 App\Http\Middleware\VerifyCsrfToken
并将该 uri 添加到 $except
数组。
您还可以使用 CLI 和 php artisan route:list
查看中间件后面的路由。
我设置了新的 L5.2,更改后的路由文件如下所示:
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::group(['middleware' =>'api', 'prefix' => '/api/v1'], function () {
Route::post('/api/v1/login', 'Api\V1\Auth\AuthController@postLogin');
});
当我去找邮递员并制作 POST: http://kumarajiva.dev/api/v1/login 我得到: TokenMismatchException in VerifyCsrfToken.php line 67
但是我的内核文件看起来像这样:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
我没有改变任何东西。路由 'login' 在 'api' 中间件组中(不是 'web',VerifyCsrfToken 所在的位置),但令人惊讶的是我遇到了以上错误。所以我想知道 - wtf?它是如何工作的? 'web' 中间件组是否始终执行(针对每个请求)?
默认情况下,所有路由似乎都包含在 'web' 组中。
在RouteServiceProvider
中有这个函数。
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
如果您希望特定的 uri 不检查 CSRF 令牌,请转至 App\Http\Middleware\VerifyCsrfToken
并将该 uri 添加到 $except
数组。
您还可以使用 CLI 和 php artisan route:list
查看中间件后面的路由。