对Lumen上的特定路由禁用CSRF TokenMismatch

时间:2015-12-14 23:15:26

标签: php laravel csrf lumen

我正在使用Lumen框架。

我有一个外部程序,每2分钟发送一次 HTTP POST 请求。

我不需要任何观点,所以我想了解如何在Lumen中禁用特定路线的CSRF TokenMismatch(我需要在其他一些路线上激活它)?

1 个答案:

答案 0 :(得分:3)

您可以扩展VerifyCsrfToken课程并将路线添加到excludes列表。

将名为VerifyCsrfToken.php的此文件添加到app/Http/Middleware

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Session\TokenMismatchException;

class VerifyCsrfToken extends \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken {

    protected $except_urls = [
        // your excluded URLs go here
        'example/route',
    ];

    public function handle($request, Closure $next)
    {
        $regex = '#' . implode('|', $this->except_urls) . '#';

        if ($this->isReading($request) || $this->tokensMatch($request) || preg_match($regex, $request->path()))
        {
            return $this->addCookieToResponse($request, $next($request));
        }

        throw new TokenMismatchException;
    }

}

然后将中间件添加到bootstrap/app.php文件中。您必须取消注释$app->middleware(),然后将其添加到其中:

$app->routeMiddleware([
'csrf' => 'Laravel\Lumen\Http\Middleware\VerifyCsrfToken',
]);