Я реализую функцию «нравится / не нравится» с помощью laravel. Я получил все и работает, за исключением асинхронного запроса. Я только хочу, чтобы вошедшие в систему пользователи могли любить / не нравиться элементу, поэтому запрос должен быть проверен на стороне сервера. Я также хочу, чтобы это был асинхронный запрос, поэтому обновление страницы не требуется.
Что было бы хорошим способом сделать это? Я уже загрузил jquery, поэтому использование углового JUST для этого было бы немного излишним. Как бы я защитил запрос? Я читал кое-что о токенах, но не совсем уверен в этом.
Лучший способ сделать это — добавить фильтр 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;
}
});
Ссылка с более подробной информацией
Других решений пока нет …