设置注销...有一种方法可以检查控制器操作是否包含before_action

时间:2017-01-10 21:15:06

标签: ruby-on-rails

我的控制器中有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 

1 个答案:

答案 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 

这很好用!