1

デバイスを使用してユーザーを最後のページにリダイレクトすることについて、多くの質問を見てきました。ここに良い説明とサンプルコードがあります

それは私にとってはうまくいき、私が望むこともありますが、ユーザーが以前にアクセスしていたページではなく、ユーザーがアクセスしようとしていた制限されたページにリダイレクトしたい場合もあります。例えば:

  1. ユーザーがホームページにある「新しい投稿ボタンを作成」を押します
  2. これは、ユーザーがログインする必要がある before_filter で保護された新しいアクションである投稿コントローラーにヒットします
  3. ユーザーはログインページにリダイレクトされます
  4. ログイン後、ユーザーはホームページにリダイレクトされます。
  5. しかし、この状況では、ユーザーがホームページではなく、アクセスしようとしていた新しい投稿フォームで新しいアクションにリダイレクトされるようにしたかったのです。
4

2 に答える 2

2

そのため、サインイン後にユーザーがアクセスしようとしていた保護されたページにリダイレクトするには、store_location 関数が after_filter ではなく before_filter である必要があることに気付きました。

before_filter :store_location

def store_location
  # store last url as long as it isn't a /users path
  session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
end

def after_sign_in_path_for(resource)
  session[:previous_url] || root_path
end

new_post_pathたとえば、アクセスしようとすると store_location 関数が実行されるため、この場合はセッション変数が保護されたページに設定されるため、これは理にかなっています。github コード サンプルのように after_filter として store_location がある場合、store_location 関数が最後に実行されたのは、保護されていないアクション、つまり私の例のホームページに到達したときでした。

于 2013-03-06T17:19:08.477 に答える
0

次のスニペットを使用して、ログイン ページにリダイレクトする前に現在のパスを設定します。

session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/

ログインに成功した後、このセッション変数が設定されているかどうかを確認し、そこにリダイレクトします。

于 2013-03-06T08:00:32.667 に答える