【问题标题】:Devise logout when trying to destroy an object (Rails 3.0.5 & Devise 1.1.8)尝试销毁对象时设计注销(Rails 3.0.5 和设计 1.1.8)
【发布时间】:2011-05-12 00:51:01
【问题描述】:

我升级到 Rails 3.0.5 和 Devise 1.1.8。当我尝试 delete 任何对象(通过具有 :remote => true 的视图)时,我会看到一个身份验证对话框,并且 Devise 会话被破坏。然后,我必须再次登录,并且对象仍然存在......其他人有这个问题吗?关于如何解决它的任何想法?

非常感谢。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    此问题与设计无关。简而言之,从 Rails 3.0.4 开始,要求每个非 GET 请求都应该有 CSRF 令牌,否则会话将被清除。

    这里有两个主要变化 修复 CSRF 时的行为 保护失败已更改,并且 现在所有人都需要令牌 非 GET 请求。

    应用此补丁后 CSRF 失败 请求将不再生成 HTTP 500 错误,而不是会话将 重置。用户可以覆盖这个 通过覆盖行为 handle_unverified_request 在他们自己的 控制器。

    更多详情:http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails

    jQuery sn-p 用于您的 AJAX 请求

    $(document).ajaxSend(function(e, xhr, options) {
      var token = $("meta[name='csrf-token']").attr("content");
      xhr.setRequestHeader("X-CSRF-Token", token);
    });
    

    如果您使用的是原型,则需要以下代码:

    Ajax.Responders.register({
      onCreate: function(request) {
        var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
    
        if (csrf_meta_tag) {
          var header = 'X-CSRF-Token',
              token = csrf_meta_tag.readAttribute('content');
    
          if (!request.options.requestHeaders) {
            request.options.requestHeaders = {};
          }
          request.options.requestHeaders[header] = token;
        }
      }
    });
    

    【讨论】:

      【解决方案2】:

      我在没有 ajax destroy 调用时遇到了同样的问题,结果我只是在旧布局的标题中丢失了 。

      【讨论】:

        【解决方案3】:

        我正在使用 rails 3.0.5 并简单地将我的 public/javascript/rails.js 替换为来自此处的最新版本 (https://github.com/rails/jquery-ujs/blob/master/src/rails.js) 解决了这个问题!!

        PS : 当你只使用 jquery 时应该使用 rails.js!

        【讨论】:

          【解决方案4】:

          我在 Rails 3.0.5 + Devise (1.x + 1.2RC) 中遇到了同样的问题:用户正在退出某些 AJAX 请求。

          目前唯一避免这种情况的解决方案是将 Rails 降级到 3.0.3。

          【讨论】:

          • 好的..我会保留3.0.3一段时间..谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-15
          • 1970-01-01
          相关资源
          最近更新 更多