我遇到了一个奇怪的问题。我最近检测到通过AJAX发布的文本字段给出了错误。经过调查,我发现会话被重置为此POST AJAX请求。我认为必须是csrf问题。我检查了令牌,它正在布局文件中正确传递:
<%= javascript_tag "var AUTH_TOKEN = #{form_authenticity_token.inspect};" if protect_against_forgery? -%>
我的AJAX请求如下:
<script type="tex/javascript">
$(document).ready(function(){
$("#post_msg").click(function(){
var update = $("#msg").val();
var authenticity_token = AUTH_TOKEN;
$.ajax({
type: "POST",
url: "/messages.js",
data: "msg[text]="+escape(msg) + "&_csrf_token="+encodeURIComponent(authenticity_token),
dataType: "json",
success: function(msg){
// Code to append the msg to DOM
)
但是在调试器中,我注意到csrf令牌与散列中已有的令牌不同。我无法理解这一切。可能是这一切的原因是什么?
答案 0 :(得分:0)
在我正在使用的Rails 3应用程序中,令牌名称为authenticity_token
,并且在POST之前不会对实际令牌本身进行编码。