禁用Lumen上特定路由的CSRF令牌不匹配


Disable CSRF TokenMismatch for specific routes on Lumen

我使用的是Lumen Framework。

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

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

您可以扩展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',
]);