运行Laravel 5.3我的应用程序为网站上的访客调用了某些API路由。 我不希望这些内容完全公开并且可以直接访问,因此我认为我只需要在这些路由中添加“VerifyCsrfToken”中间件。
我相信至少会确认请求来自我的申请。
对此有何指导?感谢
更新 在按照@motie的建议将csrf中间件添加到路由之后,然后添加“StartSession”中间件,这条路线似乎也能正常工作 - 但它实际上并没有按照我的希望工作 - 希望能比较令牌和如果不匹配就会失败 - 但事实并非如此。
VerifyCsrfToken在其检查中包含以下内容:
if (
$this->isReading($request) ||
$this->runningUnitTests() ||
$this->shouldPassThrough($request) ||
$this->tokensMatch($request)
)
它需要传递任何一个条件 - 这有点奇怪,因为“isReading”只是检查请求是否使用“GET”方法,因此它总是通过......
StartSession
中间件似乎刷新了API路由的csrf令牌,这意味着Web令牌和api调用令牌不一样。我认为将此路由添加到“Web”路由或将“web”中间件添加到其中可能更容易... 答案 0 :(得分:0)
要为某些api路由启用csrf,请在```app / Http / Kernel.php ::
中为它定义别名tected $routeMiddleware = [
...
'csrf' => \App\Http\Middleware\VerifyCsrfToken::class,
'session' => \Illuminate\Session\Middleware\StartSession::class,
...
]
然后您就可以将它添加到api.php中所需的路线。
Route::get('secured-api-route', ['middleware' => 'csrf'])
;
使用csrf中间件需要激活会话中间件。因此,创建一个新的中间件组比注册单独的中间件更好。
'api.csrf' => [
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
]