Rails 3 - аутентификация и: before_filter - PullRequest
2 голосов
/ 12 октября 2011

Я новичок в Rails.Я пытаюсь построить простую систему аутентификации, чтобы application_controller Я поставил следующие строки:

  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  

Моя проблема в одном действии - в этом действии я проверяю, входит ли пользователь в систему.или нет.И если пользователь входит в систему, то я буду отображать один шаблон, а если нет, то я буду отображать второй.Похоже:

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

И вот проблема - это не работает мне.По крайней мере ... хорошо - если я не вхожу в систему, будет отображаться шаблон template_for_not_login_user , а если я - так, то template_for_login_user .Это правильно.

Но если я вхожу в систему и нахожусь на template_for_login_user , но у меня 15 минут простоя => сеанс истечет => Я должен быть перенаправлен на форму входа,Но вот проблема - я 15 минут бездействую, и я обновляю эту страницу, поэтому я все еще в действии template_for_login_user - и это проблема ...

Я хотел быспрашиваю - не могли бы вы мне помочь, пожалуйста, в чем может быть проблема?Что я делаю не так?

1 Ответ

5 голосов
/ 12 октября 2011

В вашем ApplicationController вы добавили такую ​​строку:

before_filter :check_session

если какое-либо действие контроллера не требует аутентификации пользователя, вы можете добавить это:

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

в этом примере это пропустит ваш before_filter: check_session для action: index и search. Таким образом, у вас есть глобальное поведение, которое всегда проверяет сеанс для пользователя, вошедшего в систему. Но вы можете пропустить этот конкретный контроллер, где некоторые действия не требуют аутентификации пользователя

...