4

我的网站应该像 facebook.com 一样工作。如果用户已登录并且转到“/”,则应将其呈现为家庭控制器。如果它没有被记录,它应该是呈现landing_page控制器

"/ " && user_signed_in? ---> 家庭控制器

"/" && user_not_logged ---> 登陆页面控制器

我正在使用 Rails 4 和设计

应用控制器

class ApplicationController < ActionController::Base

  before_filter :authenticate_user!
end

路由.rb

get "landing_page/index"

root 'home#index', :as => :home

我如何在除“landing_page”控制器之外的每个控制器中运行的 ApplicationControl 中保留“before_filter”?

更新

如果我转到“/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

路由.rb

 root 'landing_page#index'
4

3 回答 3

9

解决了!

登陆页面控制器

class LandingPageController < ApplicationController
  skip_before_action :authenticate_user!

  def index
  end

end

家庭控制器

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 

应用控制器

class ApplicationController < ActionController::Base

  before_action :authenticate_user!

end

路由.rb

 root 'landing_page#index'
于 2013-07-23T22:36:21.070 回答
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
于 2013-07-23T21:02:58.937 回答
0

我认为您可以轻松添加一个前置过滤器来处理此操作。

就像在这个答案中

于 2013-07-23T19:38:53.373 回答