Асинхронный рейтинг (нравится / не нравится) с Laravel

Я реализую функцию «нравится / не нравится» с помощью laravel. Я получил все и работает, за исключением асинхронного запроса. Я только хочу, чтобы вошедшие в систему пользователи могли любить / не нравиться элементу, поэтому запрос должен быть проверен на стороне сервера. Я также хочу, чтобы это был асинхронный запрос, поэтому обновление страницы не требуется.

Что было бы хорошим способом сделать это? Я уже загрузил jquery, поэтому использование углового JUST для этого было бы немного излишним. Как бы я защитил запрос? Я читал кое-что о токенах, но не совсем уверен в этом.

2

Решение

Лучший способ сделать это — добавить фильтр csrf в файл config.php. Laravel должен генерировать значения csrf для вас по умолчанию, но если нет, вы можете использовать его следующим образом с blade-сервером.

{{ csrf_token() }}

Ваш аякс может выглядеть примерно так ниже. Обратите внимание, что токен csrf также может быть в вашем заголовочном теге, но я поместил его здесь из-за того, как работает мой код.

$.ajax({
type: "POST",
beforeSend: function(request) {
return request.setRequestHeader('X-CSRF-Token',"{{ csrf_token() }}");
},
url: baseLocalUrl, //this would be your path to your route
data:
{
html: sendHTML //data separated by a comma
},
success: function(data){
alert("Success");
},
error: function(xhr, textStatus, thrownError) {
alert('Failed');
}});

Что касается меня в моем последнем проекте, у меня есть куча форм и немного ajax с csrf, поэтому мне пришлось изменить фильтр конфигурации на этот, потому что у меня были проблемы с их исправлением, поэтому я создал следующий фильтр ниже.

Route::filter('csrf', function()
{
$token = Request::ajax() ? Request::header('x-csrf-token') : (Input::get('csrf_token') ?: Input::get('_token'));
$test1 = Session::getToken() != Input::get('csrf_token') &&  Session::getToken() != Input::get('_token');
$test2 = Session::token() != $token;

if($test2 && $test1){

throw new Illuminate\Session\TokenMismatchException;
}
});

Ссылка с более подробной информацией

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector