将中间件附加到所有方法

时间:2016-03-17 13:20:43

标签: php laravel laravel-5.2

我在Laravel 4.2 Route::when('*', 'csrf', ['post']);中有这个,它将csrf验证插入到所有帖子中,如何移植到Larevel 5.2?

这是我自己的csrf,没有使用Laravel提供的默认值:

<?php
namespace App\Http\Middleware;
use Closure;
use Input;
class VerifyCsrfToken1
{
    public function handle($request, Closure $next)
    {
        $token = $request->ajax() ? $request->header('X-CSRF-Token') : $request->input('_token');
        if ($request->session()->token() === $token) {
            return $next($request);
        }
        throw new TokenMismatchException;
    }
}

我创建了我的个人csrf中间件,但我不知道如何在所有帖子请求上附加它们

我希望通过Route的外观将其附加到所有帖子。 (file routes.php)

谢谢:)

1 个答案:

答案 0 :(得分:2)

Laravel 5将中间件连接起来有点不同,你不会通过Request外观这样做。

您希望首先将中间件注册为全局。打开app/Http/Kernel.php并将其添加到全局$middleware数组。

protected $middleware = [
    VerifyCsrfToken1::class
    ...

然后在中间件类中,检查它是否正在处理POST请求。如果没有,请让它直接传递请求而不做任何事情。

if($request->method() != "POST") {
    // Move right along
    return $next($request);
}

旁注:正如您所说,Laravel已经有了VerifyCsrfToken个中间件。如果可能的话,我建议尝试调整它。