Rails 3设计了401个未经授权的ajax呼叫

我遇到了类似这个问题的问题: jQuery Ajax调用Rails 3获得401 Unauthorized Request

我已将token_authenticatable添加到我的设计模型中。

在我对ajax调用的操作中:

def rate params[:kon][:IP] = request.remote_ip params[:kon][:tag_id] = params[:id] @konkurrencer = Tagrating.new(params[:kon]) @konkurrencer.save @konkurrencer.tag.rating_score += params[:kon][:ratings].to_i @konkurrencer.tag.ratings += 1 @konkurrencer.save render :nothing => true end 

如何validationajax调用?

如何获取当前用户的令牌密钥。 我试过了:

作者发布这是一个CSRF令牌问题。 虽然发布的解决方案有效,但它并不安全。 在这个问题中提出了一个更好的解决方案: https : //stackoverflow.com/a/8175979/696610

我在这里复制它:

你应该做这个:

  1. 确保布局中包含<%= csrf_meta_tag %>

  2. 添加beforeSend到所有ajax请求以设置如下所示的标题:


 $.ajax({ url: 'YOUR URL HERE', type: 'POST', beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}, data: 'someData=' + someData, success: function(response) { $('#someDiv').html(response); } }); 

感谢https://stackoverflow.com/users/1052893/chau-hong-linh的答案。

它没有设计401授权错误,而是CSRF令牌。

刚刚为我的行动禁用了它:

 protect_from_forgery :except => :rate 

另一种方法,如果你只能访问url(假设你使用的是插件)

  var csrf_token = $('meta[name=csrf-token]').attr('content'); var csrf_param = $('meta[name=csrf-param]').attr('content'); var params; if (csrf_param !== undefined && csrf_token !== undefined) { params = csrf_param + "=" + encodeURIComponent(csrf_token); } var url = "/your/path?" + params