为 Lumen 上的特定路由禁用 CSRF TokenMismatch
Disable CSRF TokenMismatch for specific routes on Lumen
我正在使用 Lumen 框架。
我有一个外部程序每 2 分钟发送一个 HTTP POST 请求。
我不需要任何视图,所以我想了解如何在特定路由的 Lumen 中禁用 CSRF TokenMismatch(我需要在其他路由上激活它)?
您可以扩展 VerifyCsrfToken
class 并将您的路线添加到 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',
]);
我正在使用 Lumen 框架。
我有一个外部程序每 2 分钟发送一个 HTTP POST 请求。
我不需要任何视图,所以我想了解如何在特定路由的 Lumen 中禁用 CSRF TokenMismatch(我需要在其他路由上激活它)?
您可以扩展 VerifyCsrfToken
class 并将您的路线添加到 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',
]);