Я прочитал все сообщения, касающиеся аутентификации csrf и публикации записей с использованием ajax, и внес изменения.Хотя проблема «Не удается проверить подлинность токена CSRF» исчезла, я все еще подозреваю, что это может быть проблемой.Я использую Rails 5.1.Я долго работал над этим вопросом и был бы признателен за помощь, пожалуйста.
Эта часть приложения имеет одну HTML-форму с колесом, которое вращается с помощью jquery.Форма получает скрытые данные от контроллера, к которому скрипт jquery обращается из формы.Результирующая позиция вращения обеспечивает оставшиеся данные, которые будут записаны в таблицу PlayerBonuses.Проблема возникает, когда программа пытается отправить этот результат в таблицу.
Внизу включены возвращенные данные и сообщение об ошибке в трех тестах.У данных нет пропущенных столбцов, которые я вижу.
Ajax-скрипт с - data: player_bonuse и dataType: 'json'
Ajax-скрипт с - data: JSON.stringify ({player_bonuse})
Для сравнения, данные возвращаются через обычный ввод бонусных данных через метод restful Rails.
Примечание:
а) Номер 1 больше напоминает результат покоя
б) Номер 2 содержит имя параметра "player_bonuse" (как и результат покоя)
в) Номер 2выделяет результат => nil, который не очевиден в 1.
d) Также не показывают данные CSRF в заголовке, который существует в 3, хотя ошибка аутентификации больше не отображается.
Заранее благодарю за любую помощь / советы, которые вы можете предоставить.
Модель player_bonuse:
class PlayerBonuse < ApplicationRecord
belongs_to :user
belongs_to :bonus_table_reference
belongs_to :bonus_reference
belongs_to :award_reference
validates :user_id, presence: true
validates :bonus_table_reference_id, presence: true
validates :bonus_reference_id, presence: true
validates :award_reference_id, presence: true
validates :date_awarded, presence: true
validates :award_amount, presence: true
end
Метод вращения контроллера:
def return_daily_spin
@player_bonuse = PlayerBonuse.new
@user = User.find(current_user.id)
@date_awarded = Time.zone.now
end
Метод создания контроллера:
def create
@player_bonuse = PlayerBonuse.new(player_bonuse_params)
if @player_bonuse.save
if @player_bonuse.bonus_reference_id = 2
redirect_to lobby_path(:user_id => current_user.id)
else
respond_to do |format|
format.html { redirect_to @player_bonuse, notice: 'Player bonus was successfully created.' }
format.json { render :show, status: :created, location: @player_bonuse }
end
end
else
respond_to do |format|
format.html { render :new }
format.json { render json: @player_bonuse.errors, status: :unprocessable_entity }
end
end
end
Параметры таблицы контроллера:
def player_bonuse_params
params.require(:player_bonuse).permit(:id, :user_id, :bonus_table_reference_id, :bonus_reference_id, :award_reference_id, :date_awarded, :award_amount, :search)
end
Метод отправки AJAX:
$.ajax({
url: '/player_bonuse',
type: 'POST',
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
data: player_bonuse,
dataType: 'json'
}).done(function (data) {
if (data.Success) {
alert('success!');
} else {
alert('failure');
}
});
Обработка результата с помощью приведенного вышекод:
Обработка PlayerBonusesController # создать как JSON Параметры: {"user_id" => "1", "bonus_table_reference_id" => "10", "bonus_reference_id" => "2", "award_reference_id" =>"1", "date_awarded" => "2018-12-19 09:38:06 +1000", "award_amount" => "5000"} Выполнено 400 неверных запросов за 2 мс (ActiveRecord: 0,0 мс)
ActionController :: ParameterMissing (параметр отсутствует или значение пусто: player_bonuse
Результат с использованием кода "data: JSON.stringify ({player_bonuse})" "
ОбработкаPlayerBonusesController # создать как / Параметры: {"{\" player_bonuse \ ": {\" user_id \ ": \" 1 \ ", \" bonus_table_reference_id \ ": 11, \" bonus_reference_id \ ": 2, \" award_reference_id \ ": 1, \" date_awarded \ ": \" 2018-12-19 11:02:41 1000 \ ", \" award_amount \ ":10000}} "=> nil} Выполнено 400 неправильных запросов за 2 мс (ActiveRecord: 0,0 мс)
ActionController :: ParameterMissing (параметр отсутствует или значение пусто: player_bonuse): ________________________________________________________________________________
Результат при добавлении бонуса через Rails Restful Process:
"authenticity_token" => "nkcECEzAYJQvDQ26 / Ij5eslDOzk8umY / c0aexJGCVsWR1F6CYl + 7SH4FgcJhaBS656CRf5t =" 1> "1>" player_1> "player_3_1>" player_3_1 = "player_1_1 =" player_3_1 = "player_3_1 =" player_1_1 = "player_3_1 =" player_3_1 = "player_1_1", "bonus_table_reference_id" => «11», «bonus_reference_id» => «2», «award_reference_id» => «1», «date_awarded (3i)" => «18», «date_awarded (2i)" => «12"," date_awarded (1i) "=>« 2018 »,« award_amount »=>« 10000 »},« commit »=>« Создать »}