2015-08-21 3 views
0

Недавно я пытался научиться работать с Laravel. Большинство учебников находятся в 4.*, но все в порядке. Реализация/преобразование некоторых исправленных функций продолжается до сих пор. Я узнал, что версия 5.* уже осуждал beforeFilter как в:Преобразование beforeFilter (4. *) в Middleware (5. *) в Laravel

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 немного лучше? Спасибо.

ответ

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, что позволяет выполнить запрос для «чтения» глаголов и автоматически проверять токен, если используются любые другие глаголы, такие как post, put, patch, delete.

Если проверить Laravel CSRF Protection Documentation вы увидите, есть один пункт, который гласит:

Вам не нужно вручную проверить маркер CSRF на POST, PUT, DELETE или запросы. Связующее ПО VerifyCsrfToken HTTP проверяет, что токен во входном запросе совпадает с токеном, хранящимся в сеансе.

Так что вам больше не нужно иметь этот фильтр. Что касается понимания того, как Middleware работает в Laravel, чтение всего HTTP Middleware Documentation поможет вам разобраться, как это работает.

+0

Спасибо, сэр за подробное объяснение. Это помогает мне в понимании темы. – Patrick2607

+0

Добро пожаловать. – Bogdan

Смежные вопросы