gpt4 book ai didi

ruby-on-rails - Rails 4 无法验证 CSRF token 的真实性

转载 作者:行者123 更新时间:2023-12-04 05:53:03 25 4
gpt4 key购买 nike

我的 show.html.erb 页面中有一个数组,我想使用 Ajax 请求将它从 javascript 传递到 Controller 中的一个方法,但它给我错误 HTTP/1.1 422 Unprocessable Entity 无法验证 CSRF token 的真实性 我不知道去哪里搜索

这是我的日志:

Started PUT "/new_surveys/submit" for 127.0.0.1 at 2014-05-15 19:26:12 +0200
Processing by NewSurveysController#update as JSON
Parameters: {"arrays"=>["valueSelected"], "id"=>"submit", "new_survey"=>{}}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 15ms

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

这是处理这部分的我的路由文件的一部分

resources :new_surveys
put "/new_surveys/submit", to: 'new_surveys#submit'

我的 Controller ,在搜索了大部分答案之后只是添加了 skip_before_filter 但它从一开始就存在并且同样的错误

class NewSurveysController < ApplicationController
before_action :set_new_survey, only: [:show, :edit, :update, :destroy, :submit]
skip_before_filter :verify_authenticity_token, only: [:submit]

# GET /new_surveys
# GET /new_surveys.json
def index
@new_surveys = NewSurvey.all
end

def submit
data = params[:arrays]
some code ..
end

这是我在 show.html.erb 的 javascript 中的 AJAX 调用:

function create_ajax_request (url, data, callback) {
var xhr = new XMLHttpRequest();
xhr.open('PUT', url, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('Accept', 'application/json'); // I want JSON
xhr.responseType = "json";
xhr.addEventListener('load', function() {
xhr.responseJSON = xhr.response;
console.log(xhr.responseJSON);
callback(xhr.responseJSON, xhr);
});
xhr.send( JSON.stringify(data) );
return xhr;
}

function submit()
{
var SelectedValue = [];
var name = 0;
var radios = document.getElementsByTagName("input");
for(var i=0; i<radios.length; i++) {
if(radios[i].checked)
{
var valueSelected = radios[i].value;
window.alert(valueSelected);
SelectedValue.push("valueSelected")
}
}
var url = ['http://' + location.host, 'new_surveys', 'submit'].join('/');
var callback = function(responseJSON, xhr) {
}
create_ajax_request(url, {arrays: SelectedValue}, callback);
}

已解决 在下面的评论中,只需删除由正在为节目创建对象的脚手架创建的自动生成的方法,更新 .. 等

最佳答案

您需要在 ajax 请求中发送 header 。

var metaTags = document.getElementsByTagName('meta');
for ( var i = 0; i < metaTags.length; i++) {
if (metaTags[i].name === 'csrf-token') {
xhr.setRequestHeader('X-CSRF-Token', metaTags[i].content);
}
}

通过 jquery-rails gem 使用 ajax 功能将免费为您提供此功能:)

关于ruby-on-rails - Rails 4 无法验证 CSRF token 的真实性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com