ユーザーがサインインする前の最後のページにリダイレクトするサインインページが必要です.Railsでそれを行うにはどうすればよいですか. 方法のリンクごとに after_sign_in_path をオーバーライドする必要がありますか?
ありがとう :)
ユーザーがサインインする前の最後のページにリダイレクトするサインインページが必要です.Railsでそれを行うにはどうすればよいですか. 方法のリンクごとに after_sign_in_path をオーバーライドする必要がありますか?
ありがとう :)
簡単な答えはイエスです。オーバーライドする必要がありますafter_sign_in_path
。私が見つけた最も簡単な方法は次のとおりです。
アプリケーション コントローラー内に、2 つのメソッドを追加する必要があります。
include SessionsHelper
def after_sign_in_path_for(resource_or_scope)
case resource_or_scope
when :user, User
store_location = session[:return_to]
clear_stored_location
(store_location.nil?) ? requests_path : store_location.to_s
else
super
end
end
def check_login
if !anyone_signed_in?
deny_access
end
end
まず、 をオーバーライドしafter_sign_in_path
て、Rails セッションから取得した新しい保存場所を に保存します。store_location
これは で定義しますSessionsHelper
。before_filter
次に、これを使用する任意のコントローラーでとして使用できるメソッドを作成します。
次に、セットアップsessions_helper.rb
module SessionsHelper
def deny_access
store_location
redirect_to new_user_session_path
end
def anyone_signed_in?
!current_user.nil?
end
private
def store_location
session[:return_to] = request.fullpath
end
def clear_stored_location
session[:return_to] = nil
end
end
ここでは、アプリケーション コントローラー内で使用するメソッドを定義しているだけです。これらはすべて自明のはずです。before_filter :check_login
前のパスを記憶したいコントローラーでは、他の前フィルターよりも前に使用することを忘れないでください。