Недавно я пытался научиться работать с Laravel. Большинство уроков находятся в 4.*
, но это нормально. Реализация / преобразование некоторых устаревших функций до сих пор идут хорошо. Я узнал эту версию 5.*
осудил beforeFilter
как в:
public function __construct() {
$this->beforeFilter('csrf', array('on' => ['post', 'put', 'patch', 'delete']));
}
Я хочу преобразовать это в версию 5.*
, Из того, что я понимаю, это можно сделать с помощью Middleware, но я понятия не имею, как мне достичь того же результата. Я прочитал документы, но это не помогло мне понять тему.
Там уже есть файл промежуточного программного обеспечения под названием 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 = [
//
];
}
Кто-нибудь может мне помочь настроить это и помочь мне лучше понять Middleware? Спасибо.
Поскольку защита 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, что позволяет выполнить запрос для «прочитанных» глаголов и автоматически проверить токен, если используются какие-либо другие глаголы, такие как post
, put
, patch
, delete
,
Если вы проверите Защитная документация Laravel CSRF вы увидите, что есть один абзац, который гласит:
Вам не нужно вручную проверять токен CSRF по запросам POST, PUT или DELETE. Промежуточное ПО HTTP VerifyCsrfToken проверит, что токен во входных данных запроса соответствует токену, сохраненному в сеансе.
Так что вам больше не нужно иметь этот фильтр. Что касается понимания того, как Middleware работает в Laravel, читая весь Документация по промежуточному ПО HTTP сделает большую работу, чтобы помочь вам понять, как это работает.
Других решений пока нет …