2014-11-18 6 views
5

Кажется, что Laravel 5 по умолчанию применяет фильтр CSRF ко всем запросам без запроса. Это нормально для формы POST, но может быть проблемой с API, публикующие удаления и т.д.Laravel 5: POST без проверки CSRF

Простым вопрос:

Как я могу установить POST маршрут без защиты CSRF?

+1

Это означает, что защита будет удалена. Лучше передать токен как часть вызовов API. (Я знаю, это старый вопрос, просто предупреждение новых посетителей) – Kwebble

ответ

2

Моего хак к проблеме:

CSRF теперь «промежуточный» зарегистрирован во всем мире в App\Http\Kernel.php. При удалении его по умолчанию не будет защиты CSRF (поведение Laravel4).

Чтобы его включить в маршрут:

  1. Создать ключ стенография в приложении/Поставщики/RouteServiceProvider.php:

    protected $middleware = [ 
        // .... 
        'csrf' => 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken', 
    ]; 
    
  2. Теперь вы можете включить его в любой маршрут :

    $router->post('url', ['middleware' => 'csrf', function() { 
    ... 
    }]); 
    

Не самый элегантное решение IMO ...

5

Вы можете исключить URIs из CSRF, просто добавляя их к $except свойству VerifyCsrfToken промежуточных (приложения/Http/Промежуточный/VerifyCsrfToken.php):

<?php 

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 = [ 
     'api/*', 
    ]; 
} 

Документация: http://laravel.com/docs/5.1/routing#csrf-protection

+1

Я использовал тот же способ, чтобы предотвратить защиту Token CSRF от вызовов API –

1

просто послушайте это. Только перед 30 минутой я столкнулся с этой же проблемой. Теперь он решил. просто попробуйте это.

Goto App -> HTTP-> Kernel

открыть файл ядра.

там вы можете увидеть: \ App \ Http \ Middleware \ VerifyCsrfToken :: класс,

просто отключить этот конкретный код, используя //

Thatz это! Это сработает!

Так что вы можете удалить промежуточное из API вызываемого абонента (если вы хотите, чтобы ..)

11

Перейти к app/Http/Middleware/VerifyCsrfToken.php, а затем ввести свои маршруты (для которых требуется отключить CSRF маркер) в $ за исключением массива ,

, например:

class VerifyCsrfToken extends BaseVerifier 
{ 

    protected $except = [ 

     '/register' 

    ]; 
} 
Смежные вопросы