Deviseサインインプロセス中にパラメータを渡すにはどうすればよいですか?
ユーザーのコレクションがあり、それぞれに独自のプロファイル ページがあります。アプリケーションのすべてにアクセスできる管理者でない限り、自分のプロファイル ページは表示できるが、他のユーザーのプロファイル ページは表示できないようにしたい。
Users コントローラーを作成し、次のコードをコントローラーの先頭に適用しました。ID による検索をユーザー名に置き換えたので/users/username
、プロファイルにアクセスするには:
filter_access_to :all do
current_user == User.find_by_username(params[:id]) or
has_role? :admin
end
そして、routes.rb で次のように指定しました。
root :to => "users#show"
ユーザーがアクセス http://appli.cat.ion
すると、ログイン資格情報の入力を求められroot_path
、ユーザー コントローラーの表示アクションである にリダイレクトされます。id
サインイン プロセス中にパラメーターを渡すことができない限り、エンドレス リダイレクト ループが発生します。この問題を解決するために Devise に何かありますか?
次の 2 つの Devise メソッドが役立つと思います。
after_sign_in_path_for(resource)
と
stored_location_for(resource)
私はafter_sign_in_path
次のようにオーバーライドしました:
def after_sign_in_path_for(resource)
user_root_path(:id => current_user.username)
end
これにより、ユーザーがログインし、プロファイル ページにリダイレクトされますが、次のように戻っnil
た場合にのみ、目的の効果が得られます。stored_location_for
def stored_location_for(resource)
nil
end
(http)://appli.cat.ion/
繰り返しますが、私の目標は、ユーザーがサインインしている場合に直接移動した場合、ユーザーをプロファイル ページにリダイレクトすることです。ユーザーがナビゲートした場合、ユーザー(http)://appli.cat.tion/otherresources
をサインインさせ、要求したページにリダイレクトします。私が戻るnil
とstored_location_for
、ユーザーは何があっても常に自分のプロフィール ページにリダイレクトされます。これは良くても望ましくなく、最悪の場合は使用できません。アプリケーションのサインインに直接移動すると、stored_location
が返さnil
れ、サインインするとプロファイル ページにリダイレクトされると思いますが、root_path
.