【问题标题】:Laravel5.2 Unwanted VerifyCsrfTokenLaravel5.2 不需要的 VerifyCsrfToken
【发布时间】:2016-11-19 05:50:05
【问题描述】:

我设置了新的 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');

});

当我去邮递员发帖时: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' middelware 组中(不是 VerifyCsrfToken 所在的 'web'),但令人惊讶的是我得到了上述错误。所以我想知道-wtf?怎么样?是否总是执行“网络”中间件组(针对每个请求)?

【问题讨论】:

    标签: php routing laravel-5.2 csrf middleware


    【解决方案1】:

    默认情况下,看起来好像所有路由都包装在“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 查看中间件后面的路由。

    【讨论】:

    • 是的,你说得对,我运行php artisan route:list,我所有的路线都有“网络”中间件。这是非常违反直觉的......谢谢你的回答。
    • 在我从函数RouteServiceProvider @mapWebRoutes 中删除'middleware' =&gt; 'web' 之后,它可以工作:) 我看到使用php artisan route:list
    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 2016-12-26
    • 2021-08-20
    • 2023-03-16
    • 2016-09-30
    • 2017-09-19
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多