Ошибка токена CSRF возникает при использовании турболинков с рубином на рельсах - PullRequest
0 голосов
/ 07 марта 2019

Ошибка токена CSRF (Невозможно проверить подлинность токена CSRF.) Произойдет, если пост-передача выполняется на странице перехода с использованием turbolinks.

Но при перезагрузке страницы ошибка не возникает.

Как я могу это решить?


Mr.Mark

Спасибо, что ответили.

Это связано с тем, что csrf-токен заголовка отличается от csrf-токена формы?

Почему csrf-токен отличается при использовании turbolink?

Я решил это следующим образом, но что вы думаете?

$(document).on('turbolinks:load', function() {
  token = $("meta[name='csrf-token']").attr("content"); 
  $("input[name='authenticity_token']").val(token)
});

1 Ответ

1 голос
/ 07 марта 2019

Это популярный вопрос в последние несколько дней ...

Я бы предложил следующее:

ВНИМАНИЕ: Невозможно проверить рейки аутентификации токена CSRF

Убедитесь, что у вас есть <% = csrf_meta_tag%> в вашем макете

Добавить beforeSend для всех запросов ajax для установки заголовка, как показано ниже:

$.ajax({ url: 'YOUR URL HERE',
  type: 'POST',
  beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
  data: 'someData=' + someData,
  success: function(response) {
    $('#someDiv').html(response);
  }
});

Для отправки токена во всех запросах вы можете использовать:

$.ajaxSetup({
  headers: {
    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...