我的控制器中有before_action :logged_in_user
,如果没有login_path
,会重定向到current_user
。
我正在努力解决如何在我的应用中设置注销(销毁会话)的逻辑。
如果用户位于不需要的页面logged_in?
,我希望退出redirect_to :back
(留在该页面上),因为它确实不影响当前页面查看。
如果他们位于要求logged_in?
的页面上,我希望他们为redirect_to :root_url
,否则他们会redirect_to
login_path
这是尴尬的因为他们只是登录了。
所以基本上在伪代码中我想做以下事情:
redirect_to :back
unless :back controller:action >> before_action :logged_in_user
then redirect_to root_url
答案 0 :(得分:0)
SessionsController
def destroy
destroy_location
log_out if logged_in?
redirect_logout
end
def destroy_location
path = ["/feed", "/friends", "/saved_articles", "/favorites"]
if path.any?{|word| URI(request.referrer).path == word }
session[:exit] = root_url
end
end
def redirect_logout
redirect_to(session[:exit] || :back)
session.delete(:exit)
end
这很好用!