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

Rai*_*ner 3 ruby ruby-on-rails devise ruby-on-rails-3

我遇到了类似这个问题的问题: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
Run Code Online (Sandbox Code Playgroud)

如何验证ajax调用?

如何获取当前用户的令牌密钥.我试过了:<%= current_user.token_authentication_key %>

Tra*_*odd 14

作者发布这是一个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);
  }
});
Run Code Online (Sandbox Code Playgroud)

感谢/sf/users/73702541/答案.