【发布时间】:2017-07-03 17:00:24
【问题描述】:
运行 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”中间件可能会更容易......
【问题讨论】:
-
如果你想启用 CSRF 检查 API 路由,那么你可以简单地将路由添加到 web.php 而不是 api.php.. .
标签: laravel