【问题标题】:Path specific cookies in Rails appRails 应用程序中的路径特定 cookie
【发布时间】:2017-05-29 17:28:05
【问题描述】:

我正在开发一个在一个应用中管理的迷你网站生成器。

每个迷你站点都有自己的身份验证。

使用子域,我可以专门登录,并且只能设置一个迷你站点,而不能设置另一个。

现在,我想进行故障转移,无需设置子域即可访问每个迷你站点:http://mygenerator/minisites/1123

是否可以将 cookie 限定在 minisite/ 路径级别?

或者,有没有办法在控制器级别动态调整 before_filter 中的 cookie 键?

我查看了session_store 配置中的:path 选项,但我认为它不相关,并且它在重定向循环中搞砸了设计。

谢谢!

【问题讨论】:

  • 破解 cookie 感觉相当麻烦,而且 cookie 存储空间有限,因此将多个登录信息存储到同一个 cookie 也不是一个好主意。你为什么不追求子域选项?这似乎是最明智的做法。
  • 感谢您的建议。这将是一个额外的功能,以避免设置子域来使用应用程序的要求。
  • 这是我的观点:为什么设置子域是一项硬性要求?是通配符证书价格吗?听起来你想做 3 个小时的工作,这样你就可以省去 1 个小时的麻烦。
  • 我完全同意你的看法,它已经适用于子域,我只是想让最终用户在几秒钟内完成部署,例如在 Heroku 上,通配符子域无法使用盒子。

标签: ruby-on-rails session cookies


【解决方案1】:

我知道它的回复晚了,但我在互联网上没有找到任何回答这个问题的东西。

我的问题是应用程序总是在子路径上运行,但会话 cookie 总是发给 / 对我来说,这是通过设置和使用 Rails.application.config.x.base_url 来解决的 对于您的具体问题,您可以从方法中给出的request 对象中找出设置路径

这需要添加到您的rails Applcation ./config/initializers/session_store.rb的新文件中

  module SessionPath
      extend ActiveSupport::Concern

      def self.included(base)
        base.class_eval do
          alias_method :set_cookie_original, :set_cookie
          alias_method :set_cookie, :set_cookie_extended
        end
      end

      def set_cookie_extended(request, session_id, cookie)
        cookie[:path] = Rails.application.config.x.base_url #or what you need
        set_cookie_original(request, session_id, cookie)
      end

    end

ActionDispatch::Session::AbstractStore.send(:include, SessionPath)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 2011-03-04
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多