0

Rails 3 と Devise を認証に使用しています。

ユーザーが別のドメインから、または URL を入力して自分のサイトにアクセスするたびに追跡したいと考えています。私のサイトに次のページがあるとします。

http://www.mysite.com/somepage

訪問者が別のサイトのリンクをクリックするか、ブラウザに入力してこの URL を要求した場合、後で使用できるように URL を Cookie に入れたいと考えています。/somepageログインを必要としない場合は、正常に動作します。ではbefore_filter、リファラーが からのものではないかどうかを確認するだけmysite.comです。

ただし、/somepageログインが必要な場合、Devise はリダイレクトを行い、その結果、ログイン ページへの 2 回目のリクエストが発生します。元のリファラーは新しいリクエストに引き継がれます。したがって、私のコードはそれが元の要求された URL であると認識し、Cookie を上書きします。違う。

私はおそらく精神的なブロックを抱えているだけですが、リダイレクト先のページが要求された元のページではないことを判断する方法がわかりません。

4

1 に答える 1

0

この記事からいくつかのアイデアを得ることができるでしょう。

ページがログインを必要としない場合、リファラーを取得するのに問題はないため、ユーザー パスを含むものはすべて除外する必要があるようです。

たとえば、regex を使用して 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 に答える