我的网站应该像facebook.com一样工作。 如果用户已登录,如果用户“/”,则应呈现主页控制器。如果未记录,则应呈现 landing_page 控制器
“/ ”&& user_signed_in? ---> 主页控制器
“/”&& user_not_logged ---> landing_page 控制器
我正在使用Rails 4和Devise
的ApplicationController
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
end
Routes.rb
get "landing_page/index"
root 'home#index', :as => :home
如何在ApplicationControl中保留“before_filter”,除了“landing_page”控制器之外,每个控制器都运行一次?
更新
如果我转到“/ en / landing_page”,它会正确渲染landing_page控制器(已注销),但如果我转到“/”它会将我重定向到“/ users / sign_in”
class LandingPageController < ApplicationController
skip_before_action :authenticate_user!
def index
end
end
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
的routes.rb
root 'landing_page#index'
答案 0 :(得分:8)
解决!
<强> LandingPageController 强>
class LandingPageController < ApplicationController
skip_before_action :authenticate_user!
def index
end
end
<强>的HomeController 强>
class HomeController < ApplicationController
skip_before_action :authenticate_user!
before_action :check_auth
def check_auth
unless user_signed_in?
redirect_to :controller => :landing_page
end
end
end
<强>的ApplicationController 强>
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
<强>的routes.rb 强>
root 'landing_page#index'
答案 1 :(得分:0)
我认为你可以轻松添加一个前置过滤器来处理这个动作。
就像这个answer
一样答案 2 :(得分:0)
我认为你可以在控制器中写下confirm_logged_in函数动作
before_filter:confirm_logged_in
在该功能中,您可以根据登录用户
提及如何呈现页面def confirm_logged_in<br>
unless session[:user_id]
flash[:notice] = 'Please log in.'
redirect_to(:controller => 'access', :action => 'login')
return false #halts the before_filter<
else
return true
end
end