0

我想要一个登录页面,将他在登录之前的最后一页重定向到用户。我怎么能在 Rails 中做到这一点。我是否需要为每个链接覆盖 after_sign_in_path ?

谢谢 :)

4

1 回答 1

1

简短的回答是肯定的,您需要覆盖after_sign_in_path我发现的最简单的方法如下:

在您的应用程序控制器内部,您需要添加两个方法,

  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在您想要记住之前路径的控制器中的任何其他过滤器之前使用。

于 2012-05-17T01:42:28.550 回答