2016-05-20 69 views
2

我检查了WARNING: Can't verify CSRF token authenticity rails 但我仍然无法弄清楚它为什么会导致此错误。Rails发布无法验证CSRF令牌的真实性

这是我ajax

$.post(
     "<%= ajax_chats_path %>", 
     {timestamp :(new Date()).getTime(),msg: $('#msg').val()}, 
     function (json) { 
     console.log(json); 
    }); 

如果我添加此

skip_before_action :verify_authenticity_token 

在控制器,它能够解决这个问题。

我不确定这是正确的做法,因为它看起来可能会遇到一些安全攻击。

+0

请看这里。 http://stackoverflow.com/questions/7203304/warning-cant-verify-csrf-token-authenticity-rails – Shani

+0

我检查过了,但我仍然不知道如何修改成我的ajax。我是开发JavaScript和Rails的新手。 –

回答

5

您错过了Ajax调用中的CSRF令牌。你需要使用一个长篇$就调用,并补充一点:

beforeSend: $.rails.CSRFProtection 

相反的$.post,你可以使用等效$.ajax,这应该是这样的:

$.ajax({ 
    type: "POST", 
    url: "<%= ajax_chats_path %>", 
    beforeSend: $.rails.CSRFProtection, 
    data: { 
     timestamp: (new Date()).getTime(), 
     msg: $('#msg').val(), 
     beforeSend: $.rails.CSRFProtection 
    }, 
    success: function (json) { 
     console.log(json); 
    } 
}); 

您还应该强烈考虑将datatype字段添加到调用中,以便jQuery知道响应的处置并可以相应地处理它。您可以选择任何“xml”,“json”,“html”,“script”,“jsonp”或“text”。有关更多详细信息,请参阅jQuery.ajax() API documentation

+1

谢谢,你一直在帮助很大。我将在稍后添加'datatype'! –

相关问题