0

ユーザーがサインインする前の最後のページにリダイレクトするサインインページが必要です.Railsでそれを行うにはどうすればよいですか. 方法のリンクごとに after_sign_in_path をオーバーライドする必要がありますか?

ありがとう :)

4

1 に答える 1

1

簡単な答えはイエスです。オーバーライドする必要があります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これは で定義しますSessionsHelperbefore_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前のパスを記憶したいコントローラーでは、他の前フィルターよりも前に使用することを忘れないでください。

于 2012-05-17T01:42:28.550 に答える