Маркер подлинности Rails недействителен при использовании другого макета - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть приложение 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&region_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 ]

0 голосов
/ 17 февраля 2019

Поскольку вы используете Rails-ujs, вы можете использовать его ajax метод, который уже обрабатывает токен для вас:

https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/ajax.coffee#L15

$(document).on("click",".clickable", function(){
  var link = this.dataset.link;
  console.log(link);
  Rails.ajax({
    url: link,
    type: "POST",
  });
});
0 голосов
/ 17 февраля 2019

Попробуй так:

$(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: {}
    });
});
...