web-dev-qa-db-ja.com

Deviseでサインインした後にリダイレクト

Deviseでサインインした後、ユーザーを(ロールに基づいて)別のページにリダイレクトすることはできますか?ルートにリダイレクトするだけのようです:to => ... routes.rbで定義されたページ

ありがとう!

27
rsl

デフォルトでは、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)など。

29
janders223

このメソッドをアプリケーションコントローラーに追加するだけです

def after_sign_in_path_for(resource)
  user_path(current_user) #your path
end
16
Asnad Atta

以下のコードをアプリケーションコントローラーまたは任意のコントローラーに貼り付けるだけで、操作を実行する必要があります。

def after_sign_in_path_for(resource)
    users_path
end
2
Anoob K Bava

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
Promise Preston

https://github.com/heartcombo/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in,-sign-up,-or-sign -out

私は例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
0
shilovk