【问题标题】:In Rails 3, how to redirect straight from the routes while setting cookies在 Rails 3 中,如何在设置 cookie 时直接从路由重定向
【发布时间】:2012-07-18 16:57:44
【问题描述】:

我刚刚在我正在使用的应用程序中遇到了一种情况,我在其中编写了一个专门用于设置语言 cookie 并重定向到最后一个 url 的操作。像这样的:

def language
  cookies[:locale] = {:value => params[:locale], :domain => APP_DOMAIN}
  redirect_to_back
end

问题是,我对此不太满意。由于端点的全部目的是为服务器端的应用程序设置一种新语言,因此这种超轻量级的逻辑类型在实际到达控制器之前就被卡在了整个中间件堆栈中,这会损害工作流的性能。但后来,我发现我可以直接从路由映射器 (http://guides.rubyonrails.org/routing.html#redirection) 重定向,并认为我找到了解决所有问题的方法。

match "language/:locale" => redirect {|p, req| req.cookies["locale"] = {:value => p[:locale], :domain => APP_DOMAIN} ; req.referrer || '' }

问题是,即使我可以访问请求,因此可以在其中插入 cookie,也只会采用重定向块的最后一个值来形成重定向响应。它不会检查请求并相应地设置其 cookie(或可能有的更多)。所以是的,问题是,有没有人知道影响 route.rb 重定向的方法比通过目标路由多一点?

不,我不想要客户端解决方案。我完全知道我也可以用 JS 来做到这一点,我只是想要一个没有 JS 的解决方案。

提前致谢

【问题讨论】:

    标签: ruby-on-rails redirect routes ruby-on-rails-3.2 middleware


    【解决方案1】:
    Movienight::Application.routes.draw do
      match '/movies/search', to: proc { |env|
        [
          302,
          {"Content-Type" => 'text/plain',
           'Location' => 'cosmicvent.com',
           'Set-Cookie' => 'sessionToken=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT'},
           ['302 found']
        ]
     }
    end
    

    【讨论】:

      猜你喜欢
      • 2015-06-17
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多