Rails 3 获取请求引用者

Posted

技术标签:

【中文标题】Rails 3 获取请求引用者【英文标题】:Rails 3 get request referrer 【发布时间】:2011-12-25 16:39:24 【问题描述】:

我正在使用 Rails 3.0.9、Ruby 1.9.2、Devise 1.3.4,并且需要在 Devise 会话新视图中访问请求 url 参数,尽管我认为这是一个通用的 Rails 请求处理问题。本质上,向 Devise 认证资源发出请求,将用户重定向到登录屏幕。在登录视图中,我需要访问请求url,例如,这是开头调用的请求url

http://mysite.com/article/5?type=blah

在重定向登录页面中,我需要访问该 URL,有人知道我该怎么做吗?

【问题讨论】:

【参考方案1】:

您可以在控制器中使用request.refererrequest.env['HTTP_REFERER'] 来获取引荐来源网址。

【讨论】:

试过了,没用,显示登录界面的url。我的意思是在会话控制器中。如果我将代码放在articles 控制器中,直到登录验证后才会执行。 如果我理解您的要求,您希望将用户重定向到登录操作之前他所在的页面。当用户点击登录时,为什么不简单地将重定向 url 保存在会话中? 重定向到登录页面已经正确处理,我需要在登录页面上询问用户凭据,我需要访问原始请求 url,希望更有意义。我应该澄清一下,原始调用来自另一台服务器,而不是浏览器。 我认为您只需要在将用户重定向到登录页面之前保存引荐来源网址即可。当用户成功登录时,将他重定向到存储的值。 是的,它不起作用,但找到了特定于 Devise 的解决方法,不过感谢您的努力。【参考方案2】:

我刚刚发现 WEBrick 处理 request.referrer 不正确。但别担心。独角兽处理得当。 我没有在其他服务器上测试过。你应该用你的检查一下。我不认为您将 WEBrick 用作生产服务器。

【讨论】:

确实 WEBrick 不适合生产服务器。我还发现 WEBrick 和 Puma 处理 request.referrer 的方式存在差异 - 如果 request.referrer 使用 WEBrick 的行为与预期不同,绝对值得检查。

以上是关于Rails 3 获取请求引用者的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript window.location 未在请求标头中设置引用者

YouTube API v3 和 php 返回“请求未指定任何引用者”

此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 **** 收到的请求,引用者为空

您如何通过 javascript include 获取 Url Referer?

通过引用者发送位置哈希

如何在 Rails 2.3.8 中为 https 请求(即安全连接)查找客户端 IP