2015-12-24 5 views
4

Я начинаю с Laravel 5, и я хочу делать все правильно. Я делаю «сообщение» с Json, и я хочу использовать CSRF Protection, но я не знаю, как это сделать на моем JSON. Я видел так много примеров с AJAX, но с JSON я не нашел их.Laravel post JSON using CSRF Protection

Мне нужно установить вручную каждый токен для человека или laravel сделать это автоматически?

Как я могу передать токен в качестве аргумента на этом JSON?

Это мой JSON:

{ 
    "foo":"bar" 
} 

Это мой код контроллера:

public function Register() 
{ 
    $teste = Request::json()->all(); 
    return $teste;  
} 

Я использую все защиты по умолчанию от Laravel на ППО.

+1

Как вы посылающего JSON в сервер? JSON - это структура данных, и AJAX - это способ отправки запроса с javascript на сервер. AJAX использует JSON. – Jeff

+1

имеют параметр '_token' в вашем JSON, который будет иметь значение' var token = "{{csrf_token()}}" ' –

ответ

3

Вам всегда нужно передать токен CSRF, будь то проводка с ajax или нормально. Это в основном функция безопасности.

Laravel производит его автоматически.

Вам нужно создать «_token» переменной на вашей странице, вы можете создать переменную один раз и в основном шаблоне, а затем вы можете получить доступ к нему во всем проекте:

<script type="text/javascript"> 
    var secure_token = '{{ csrf_token() }}'; 
</script> 

Теперь вы можете отправить токен с данными в AJAX вызовов, как показано ниже:

$.ajax({ 
    data: { _token: secure_token } 
}); 

Если вы публикуете какие-либо данные через представления формы вы можете оставить это нравится:

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 

Вы всегда должны иметь токен CSRF, отправленный с каждым запросом ajax или представлением формы, которое вы делаете в своем проекте.

4

Мы решили эту проблему и в нашем приложении Laravel. Это было так же просто, как сделать следующие две вещи.

Во-первых, создать _token переменную на ваших страницах, вы можете даже сделать это в вашей базовой компоновки шаблонов представления:

<script type="text/javascript"> 
    var _token = '{{ csrf_token() }}'; 
</script> 

Затем сделать так, чтобы каждый Аякса сообщения запроса _token переменной следующим в начало вашего кода JS приложения (или в любом месте, прежде чем начать использовать AJAX звонки с JQuery):

$.ajaxSetup({ 
    data: { _token: _token } 
}); 

так долго, как ни один из ваших запросов не использовать индекс _token, вы должны теперь иметь маркер CSRF добавленный к каждому ajax-запрос, который вы делаете в своем приложении.

2

По Laravel 5, CSRF промежуточного слоя по умолчанию будет проверять либо FormData поле с именем _tokenИЛИ запрос заголовка с именем X-CSRF-Token.

Если вы не публикуете данные формы (например, json или xml), тогда заголовок является самым простым вариантом.

Если вы используете JQuery, то вы можете установить его для всех Ajax запросов, добавив следующий сценарий тег шаблона, который всегда загружен, например layout.blade.php:

<script> 
    $(function(){ 
     $.ajaxSetup({ 
      headers:{'X-CSRF-Token': '{{ csrf_token() }}'} 
     }); 
    }); 
</script> 
Смежные вопросы