最近我一直在努力学习与Laravel合作。大多数教程都在4.*
,但没关系。到目前为止,实现/转换一些已删除的功能正常。我发现版本5.*
已弃用beforeFilter
,如下所示:
public function __construct() {
$this->beforeFilter('csrf', array('on' => ['post', 'put', 'patch', 'delete']));
}
我想将其转换为版本5.*
。根据我的理解,这可以通过中间件完成,但我不知道如何才能实现相同的结果。我已经阅读了文档,但这并没有真正帮助我理解这个主题。
VerifyCsrfToken.php
文件夹中已存在一个名为app/Http/Middleware
的中间件文件,其中包含以下代码:
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
任何人都可以指导我进行设置并帮助我更好地了解中间件吗?谢谢。
答案 0 :(得分:1)
由于CSRF保护是Laravel 5捆绑在一起的,因此这实际上是它在Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
类中检查的内容,您看到VerifyCsrfToken.php
中已扩展。
如果您查看该类的handle
方法,您会看到第一个使验证成功的条件,调用isReading
方法,如下所示:
/**
* Determine if the HTTP request uses a ‘read’ verb.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
protected function isReading($request)
{
return in_array($request->method(), ['HEAD', 'GET', 'OPTIONS']);
}
这相当于你的beforeFilter
在Laravel 4中所做的,因此允许请求执行" read"动词并在使用任何其他动词时自动验证令牌,例如post
,put
,patch
,delete
。
如果您查看Laravel CSRF Protection Documentation,则会看到其中一段内容为:
您无需在POST,PUT或DELETE请求上手动验证CSRF令牌。 VerifyCsrfToken HTTP中间件将验证请求输入中的令牌是否与会话中存储的令牌匹配。
因此,您不再需要拥有该过滤器。至于理解中间件如何在Laravel中工作,阅读整个HTTP Middleware Documentation将帮助您弄清楚它是如何工作的。