【问题标题】:Devise Session destroy with ajax request how should I approach使用ajax请求设计会话销毁我应该如何处理
【发布时间】:2012-05-04 00:43:39
【问题描述】:

我有一个表单,用户可以在其中填写包含 email_id 列的详细信息

现在如果用户已登录,将会出现一个链接说明

NOT USER NAME” 例如“NOT VIREN NEGI” 反对该电子邮件字段,这将是一个ajax请求。破坏设计会话

一旦用户单击链接,设计会话将被破坏,并且在 ajax 成功时,上述锚标记将消失

我已经通过 Moneypatching 像 Devise 的 destroy 方法实现了这个解决方案

class DeviseSessionsController < DeviseController

  def destroy
    .... DEVISE CODE ...
    .... DEVISE CODE ...
    .... DEVISE CODE ...

     respond_to do |format|
       if request.xhr? **## My Hack**
         format.js { render :partial => 'users/signout' } **## render signout partial on ajax request** 
       else 
         format.any(*navigational_formats) { redirect_to redirect_path }
        format.all do
          method = "to_#{request_format}"
          text = {}.respond_to?(method) ? {}.send(method) : ""
          render :text => text, :status => :ok
       end
     end 
    end
  end
end

虽然这一切似乎都有效,但我对此并不满意

  1. 如果设计更新不适合,并且将来销毁方法可能看起来与当前不同
  2. 我已经复制了 devise/sessions_controller 的所有其他操作方法,以使设计工作没有任何问题

谁能帮我解决这个问题

请避免回答说猴子补丁是不好的,让我阅读关于猴子补丁的所有内容(我知道),这就是为什么发布这个问题。

谢谢

【问题讨论】:

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


    【解决方案1】:

    您可以使用设计辅助方法注销

    在用户控制器中创建一个动作

    def log_me_out 
       signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
        respond_to do |format|
          format.js  { render :partial => 'log_me_out',:layout => false }
        end
    end
    

    这将使您免于资金修补设计#sessions 控制器

    希望有帮助

    【讨论】:

      【解决方案2】:

      您需要在请求中添加 csrf 元标记。我认为这是问题所在,而不是设计。

      这应该可以解决

      $.ajaxSetup({
        'beforeSend': function(xhr) { xhr.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-      token']").attr('content')); }
      });
      

      【讨论】:

      • @Oboza,我想你错过了理解问题的问题是检测更好的方法来退出设计会话然后是我提出的问题(即monkeypathcing)。用我上面的代码我可以破坏会议,但我对猴子补丁解决方案不满意。如果您有更好的解决方案,这将非常有帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2012-06-30
      • 2015-02-01
      相关资源
      最近更新 更多