【问题标题】:Rails 3 devise 401 unauthorized ajax callRails 3 设计 401 未经授权的 ajax 调用
【发布时间】:2012-04-09 08:23:17
【问题描述】:

我遇到了类似这个问题的问题:jQuery Ajax calls in Rails 3 getting 401 Unauthorized Request

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

在我对 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

如何验证 ajax 调用?

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 devise


    【解决方案1】:

    作者发帖称这是一个 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 提供答案。

    【讨论】:

    • 这是更好的解决方案
    • 从安全角度来看,这个问题的公认答案是危险的。请改用这个答案!
    【解决方案2】:

    不是设计出 401 授权错误,而是 CSRF 令牌。

    刚刚为我的操作禁用了它:

    protect_from_forgery :except => :rate
    

    【讨论】:

    • 这是否意味着您的请求操作不再安全?我不是专家,但这不会是一个安全问题吗?
    • 没错..我已将答案更改为上述答案以获得最佳答案。
    【解决方案3】:

    另一种方式,如果您只能访问 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 
    

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 1970-01-01
      • 2018-10-23
      • 2017-04-22
      • 2012-08-17
      • 2014-05-26
      • 2018-07-25
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多