Ruby on Rails – request.env 返回nil
我正在尝试保存http_referer,以便我可以在用户登录后将用户发送回该URL。现在我的控制器中有一个before_filter,如果尚未通过redirect_to创建会话,则将它们发送到登录页面。 但是当我检查HTTP_REFERER时它是nil(而’REQUEST_URI’确实返回我最初来自的地方)。
谢谢。
HTTP_REFERER是浏览器在请求中设置的HTTP标头,其包含前一网页的地址,从该网页遵循当前请求的页面的链接。 直接导航到页面时不会设置它。
REQUEST_URI(也可通过request.request_uri()
)是用于访问Rails控制器/操作的统一资源标识符,应始终进行设置 。
将此调试代码放入您的视图中:
<% request.env.each do |item| %> - <%= item[0] %> : <%= item[1] %>
<% end %>
如果未设置HTTP_REFERER,请确保您通过链接或重定向导航到该页面,然后查看是否已设置。
您的浏览器也可能没有设置 HTTP_REFERER标头。 请确保您没有影响此的附加组件。 您可以使用名为Tamper Data的漂亮Firefox附加组件来查看正在发送的标头。
无论你提出什么解决方案,你都需要能够处理空的referer案例,因为客户端可以选择是否指定它。 (例如,当您使用Safari的隐私浏览和Chrome的隐身模式时,它会关闭)
在Rails中,您可以使用redirect_to :back
,如果设置了则将使用HTTP_REFERER,否则会引发错误。
使用redirect_to:back时,如果没有referrer,将引发RedirectBackError。 您可以通过挽救RedirectBackError为此案例指定一些回退行为。
- 使用Authlogic进行集成测试?
- Rails,没有密码的Authlogic(注册确定.user_sessionvalidation失败)
- 无法在Rails 3.0.1上使用Authlogic设置current_user
- 使用authlogic自动创建绕过显式用户注册的用户
- AuthLogic UserSessions Controller返回Nil
- 使用authlogic更改密码 – validation不捕获空白输入
- 使用google配置authlogic-oauth
- Rails + Authlogic @current_user问题 – “显示”方法不再有效
- 无论何处定向到登录页面,都会重定向到上一页