我想要一个登录页面,将他在登录之前的最后一页重定向到用户。我怎么能在 Rails 中做到这一点。我是否需要为每个链接覆盖 after_sign_in_path ?
谢谢 :)
我想要一个登录页面,将他在登录之前的最后一页重定向到用户。我怎么能在 Rails 中做到这一点。我是否需要为每个链接覆盖 after_sign_in_path ?
谢谢 :)
简短的回答是肯定的,您需要覆盖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
在您想要记住之前路径的控制器中的任何其他过滤器之前使用。