【问题标题】:How to prevent Rails from sending cookie _appname_session to mobile clients (disable cookies)?如何防止 Rails 向移动客户端发送 cookie _appname_session(禁用 cookie)?
【发布时间】:2014-11-15 16:07:15
【问题描述】:

我使用 Rails 4.0.2 和 Devise 3.3.0。此应用程序适用于 Web 客户端和移动客户端。 Web 应用程序使用会话,移动应用程序使用 auth_token 进行身份验证,每个请求都在 params 中发送。

现在我找不到阻止 Rails 设置 cookie 并将其发送到移动客户端的方法 - 响应总是包含

Set-Cookie = request_method=GET; path=/, _myapp_session=<token...>; path=/; HttpOnly

我非常感谢任何关于我应该在 Rails 控制器中使用过滤器或任何自定义机架中间件做什么的提示。另外我想这可以使用一些自定义设备策略或类似的东西来解决。

如果我应该提供任何其他信息,请告诉我。

谢谢。

【问题讨论】:

  • 在所有移动请求中传递 auth_token 是否安全?对于 GET 请求,它不是放在您的网址中吗?

标签: ruby-on-rails devise


【解决方案1】:

这个解决方案:Rails 3 disabling session cookies 为我工作。

我最终设置了一个中间件:

module MyApp
  class MobileClientsCookieFilter
    def initialize(app)
      @app = app
    end

    def call(env)
      status, headers, body = @app.call(env)

      request = Rack::Request.new env

      if request.params['device'].present? or any other mobile clients checks ok?
        headers.delete 'Set-Cookie'
      end

      [status, headers, body]
    end
  end
end

在 application.rb 中

config.middleware.insert_before ::ActionDispatch::Cookies, MyApp::MobileClientsCookieFilter

看起来类似的解决方案也是可能的:将 ActionDispatch::Cookies 子类化,在 Web 客户端的情况下执行 super 调用,而在移动客户端的情况下不执行任何操作。然后将此自定义中间件与原始 ActionDispatch::Cookies 交换。以这种方式实施后,根本不会为移动客户端创建/生成任何 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 2019-04-23
    • 2019-06-28
    • 2018-04-16
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多