Ruby on rails 3 Rails 3-身份验证和:在过滤器之前

Ruby on rails 3 Rails 3-身份验证和:在过滤器之前,ruby-on-rails-3,session,authentication,before-filter,Ruby On Rails 3,Session,Authentication,Before Filter,我是Rails的新手。我尝试构建一个简单的身份验证系统,以应用程序\u控制器我放了以下几行: def check_session if session[:user] if session[:expiry_time] < 10.minutes.ago reset_session flash[:warning] = 'You was logout.' redirect_to root_url else

我是Rails的新手。我尝试构建一个简单的身份验证系统,以应用程序\u控制器我放了以下几行:

  def check_session
    if session[:user]
      if session[:expiry_time] < 10.minutes.ago
        reset_session
      flash[:warning] = 'You was logout.' 
        redirect_to root_url
      else
        session[:expiry_time] = Time.now
      end
    else
      #... authenticate
      session[:expiry_time] = Time.now
      flash[:warning] = 'You was logout.' 
      redirect_to root_url
    end
  end  
def检查会话
如果会话[:用户]
如果会话[:到期时间]<10.minutes.ago
重置会话
flash[:warning]=“您已注销。”
将\u重定向到根\u url
其他的
会话[:到期时间]=time.now
终止
其他的
#... 证明…是真实的
会话[:到期时间]=time.now
flash[:warning]=“您已注销。”
将\u重定向到根\u url
终止
终止
我的问题在一个操作中-在这个操作中,我检查用户是否登录。如果用户正在登录,那么我将呈现一个模板,如果没有,那么我将呈现第二个模板。它看起来像:

<% unless session[:user].nil? %>
  <%= render :template => 'template_for_login_user' %>
<% else %>
  <%= render :template => 'template_for_not_login_user' %>
<% end %>

'登录用户'%>
'非登录用户的模板'%>
问题是,这对我不起作用。至少好的-如果我没有登录,那么将为非登录用户呈现模板template\u,如果我是,则为登录用户呈现模板template\u。这是对的

但是如果我正在登录,并且我在登录用户的模板上,但我空闲15分钟=>会话将过期=>我应该重定向到登录表单。但问题是——我空闲了15分钟,刷新了这个页面,所以我仍然在登录用户的操作模板上,这就是问题所在


我想问你-你能帮我吗,哪里会有问题?我做错了什么?

在您的应用程序控制器中,是否添加了这样一行:

before_filter :check_session
如果某些控制器操作不需要对用户进行身份验证,则可以添加以下内容:

skip_before_filter :check_session, :only=> [:index, :search, etc..]

在本例中,这将跳过关于操作:索引和搜索的before\u filter:check\u会话。这样,您就有了一个全局行为,可以始终检查登录用户的会话。但是,在某些操作不需要对用户进行身份验证的特定控制器中,您可以跳过这一行,但如果我将这一行添加到ApplicationController,那么这意味着,在每个控制器的每个操作中,方法check\u session都会检查用户是否登录,对吗?是的,实际上这就是您想要的。。。我想是吧。但您也可以在不同的控制器中,将skip_添加到_filter:check_session:only=>[:index、:search等…]之前。在本例中,这将跳过关于操作:索引和搜索的before\u filter:check\u会话。这样,您就有了一个全局行为,可以始终检查登录用户的会话。但在某些控制器中,您可以跳过此操作,因为某些操作不需要对用户进行身份验证。您忘记了逗号。它是
skip\u-before\u-filter:check\u session,:only[…]
。(由新用户约翰·亚当斯发布,他目前还不能发表评论)。