0

我正在使用 Rails 3 和 Devise 进行身份验证。

我想跟踪用户何时从另一个域或输入 URL 进入我的站点。假设我的网站上有以下页面:

http://www.mysite.com/somepage

如果访问者通过单击另一个站点上的链接或将其输入到他的浏览器中来请求此 URL,我想将该 URL 放入 cookie 中以供以后使用。如果/somepage不需要登录它工作正常。在 abefore_filter我只是检查推荐人是否来自mysite.com.

但是,当/somepage需要登录时,Devise 会进行重定向,这会导致对我的登录页面的第二次请求。原始引荐来源网址将转至新请求。所以我的代码认为它是原始请求的 URL 并覆盖了 cookie。错误的。

我可能只是有心理障碍,但我看不出如何确定重定向到的页面不是请求的原始页面。

4

1 回答 1

0

您可能会从这篇文章中得到一些想法。

似乎您应该过滤掉任何包含用户路径的内容,因为如果页面不需要登录,您可以毫无问题地获取引荐来源网址。

因此,例如,您可以使用正则表达式过滤掉 users/sign_in、users/sign_out 等。

request.referrer = request.fullpath unless request.fullpath =~ /\/users/

或者

request.env['HTTP_REFERER'] = request.fullpath unless request.fullpath =~ /\/users/

你需要把它放在某种before_filter上面,authenticate before_filter所以它首先被调用。

于 2013-05-24T19:06:55.240 回答