私はdeviseを使用していて、簡単な質問があります。 :authenticate_userをリダイレクトするにはどうすればよいですか?サインインする代わりに、ユーザーのサインアップページにbefore_filter?私は https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb を経験してきましたが、解決策を見つけるのにあまり運がありませんでした。
ここに示すように、DeviseのFailureAppを継承するカスタムFailureAppを作成する必要があります: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific -page-when-the-user-can-not-be-authenticated
ユーザーがログインしていない場合にサインアップにリダイレクトする必要があるという同様の問題がありました。application_controller.rbにメソッドを追加し、他のコントローラーでbeforeフィルターとして使用することで修正しました。
これは、デバイスの抽象化の束をスキップするため、一時的な解決策であることに注意してください。
before_filter :auth_user
def auth_user
redirect_to new_user_registration_url unless user_signed_in?
end
失敗したアプリでこれを行う正しい方法を示すwikiページを追加しました(Stevenが最初に示唆したように):
重要なのは、次のようにroute
メソッドをオーバーライドすることです。
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
:new_user_registration_url
end
end
次に、Deviseに障害アプリを使用させます。
# config/initializers/devise.rb
config.warden do |manager|
manager.failure_app = MyFailureApp
end
このアプローチは、コントローラーでauthenticate_user!
をオーバーライドするよりも望ましい方法です。これは、サインインに成功した後にユーザーをリダイレクトできるように、試行されたURLを保存するなど、Deviseが行う多くの「舞台裏」を覆い隠すことがないためです。
Admin
およびUser
Deviseリソースがある場合は、管理者向けのデフォルトの「新しいセッション」機能を維持することをお勧めします。処理されているスコープのタイプを確認することで、これを非常に簡単に行うことができます。
# app/lib/my_failure_app.rb
class MyFailureApp < Devise::FailureApp
def route(scope)
scope.to_sym == :user ? :new_user_registration_url : super
end
end