Маркер подлинности Rails недействителен при использовании другого макета
У меня есть приложение rails, которое использует модальные для отправки данных на контроллер и сохранения их в базе данных. Поток работает отлично при использовании моего старого "оригинального" макета, но после реализации нового макета на основе начальной загрузки, когда я пытаюсь подтвердить, что получаю недопустимую ошибку CRSF.
Если я верну оригинальную компоновку на контроллере, она будет работать нормально.
JS, который запускает этот метод click / post, выглядит следующим образом:
$(document).on("click",".clickable", function(){
var link = $(this).data('link')
console.log(link);
$.ajax({
url: link,
type: "POST",
});
});
Ничто в коде не меняется, кроме макета для контроллера, и, как я уже говорил, если я верну макет обратно к исходному, он будет работать просто отлично. Мог ли я пропустить файл javascript или что-то еще в javascript нового макета?
Новый макет файла js: stack.js
//= require jquery3
//= require popper
//= require rails-ujs
//= require bootstrap
//= require stack/vendors/vendors.min
//= require stack/vendors/charts/raphael-min
//= require stack/vendors/charts/morris.min
//= require stack/vendors/extensions/unslider-min
//= require stack/vendors/timeline/horizontal-timeline
//= require stack/core/app-menu
//= require stack/core/app
//= require stack/scripts/pages/dashboard-ecommerce
//= require_tree ./common
Старый макет файла js: application.js
//= require jquery3
//= require popper
//= require rails-ujs
//= require bootstrap
//= require_tree ./common
Все js-файлы, специфичные для нового шаблона, находятся в папке "stack" в главной папке javascripts, поэтому только./common включен выше. Я не хотел, чтобы все файлы в стеке были включены, так как есть много файлов, которые я еще не подключил или не удалил.
Какие-нибудь мысли?
Ошибка:
Started POST "/add_interest?city_id=59020&name=Mission+District%2C+San+Francisco%2C+California%2C+US®ion_id=128085&type=region" for 127.0.0.1 at 2019-02-16 13:30:02 -0800
Processing by InterestsController#create as */*
Parameters: {"city_id"=>"59020", "name"=>"Mission District, San Francisco, California, US", "region_id"=>"128085", "type"=>"region"}
Can't verify CSRF token authenticity.
Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms)
ActionController::InvalidAuthenticityToken - ActionController::InvalidAuthenticityToken:
`
2 ответа
Поскольку вы используете Rails-ujs, вы можете использовать его ajax
метод, который уже обрабатывает токен для вас:
$(document).on("click",".clickable", function(){
var link = this.dataset.link;
console.log(link);
Rails.ajax({
url: link,
type: "POST",
});
});
Попробуйте вот так:
$(document).on("click",".clickable", function(){
var link = $(this).data('link')
console.log(link);
$.ajax({
url: link,
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
method: "POST",
dataType: "json",
data: {}
});
});