Deviseでサインインした後、ユーザーを(ロールに基づいて)別のページにリダイレクトすることはできますか?ルートにリダイレクトするだけのようです:to => ... routes.rbで定義されたページ
ありがとう!
デフォルトでは、Deviseはアクションの後でルートにルーティングします。 Devise Wikiには、これらのアクションのオーバーライドに関する素晴らしい記事があります https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful -サインイン
または、stored_locations_for(resource)
をnilに設定して、アクションごとに異なるリダイレクトを持つこともできます:after_sign_up_path(resource)
、after_sign_in_path(resource)
など。
このメソッドをアプリケーションコントローラーに追加するだけです
def after_sign_in_path_for(resource)
user_path(current_user) #your path
end
以下のコードをアプリケーションコントローラーまたは任意のコントローラーに貼り付けるだけで、操作を実行する必要があります。
def after_sign_in_path_for(resource)
users_path
end
Deviseにはヘルパーメソッド(after_sign_in_path_for)があり、ログイン/サインイン後にルートへのデフォルトのDeviseルートを上書きするために使用できます。
ログイン後に別のパスへのリダイレクトを実装するには、このメソッドをアプリケーションコントローラに追加するだけです。
#class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
users_path
end
ここで、users_pathはリダイレクト先のパス、serはDeviseのモデルに対応するモデル名です。
N/B:AdminをDeviseのモデル名として使用した場合は、
#class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
admins_path
end
それで全部です。
これが役に立てば幸いです
私は例1を使用しました:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authenticate_user!
protected
def after_sign_in_path_for(resource)
current_user.is_a?(Admin) ? admin_tests_path : (stored_location_for(resource) || root_path)
end
end