2013-06-18 2 views
1

Я хотел бы сделать тайм-аут сеанса рельсов и перенаправить на страницу входа после окончания сессии.Время ожидания сеанса Rails и перенаправление на страницу входа

Это мой контроллер приложений и, похоже, не работает.

class ApplicationController < ActionController::Base 

    protect_from_forgery with: :exception 
    before_filter :session_expires, :only => [:login] 

    def session_expires 
     a = session[:expires_at] 
     b = Time.now 
     minutes = (a - b)/1.minute 
     if b > a 
     reset_session 
     flash[:error] = 'Session Expire !' 
     render "sessions/new" 
     end 
    end 


end 

Я не уверен, мне нужно использовать JQuery или Ajax, чтобы заставить его работать. Может ли кто-нибудь дать мне какую-то идею или какой-нибудь хороший учебник, за которым я смогу следовать. Спасибо за миллион.

+0

Спасибо, человек! Это отлично работает –

ответ

0

Вы хотите запустить before_filter по каждому запросу, а не только по электронной почте.

Заменить before_filter :session_expires, :only => [:login] на before_filter :session_expires.

+0

Нет На самом деле, это выполнение сеанса, которое я хочу запустить до входа в систему. То, что я хочу сделать, - это после входа в систему пользователя. Я назначу время окончания сеанса, например (1.minute from now), а затем через одну минуту страница автоматически выйдет из системы и перенаправится на страницу входа. Любая помощь пожалуйста. –

+0

Этот ответ в порядке, если вы этого не понимаете, вероятно, вам стоит взглянуть на направляющие по железной дороге http://guides.rubyonrails.org/getting_started.html –

0

Я предлагаю вам взглянуть на этом руководстве - почему вы не должны делать проверку подлинности на своем собственный

The definitive guide to form-based website authentication

Там это отличное решение для Ruby/Rails доступного - Разрабатывает камень https://github.com/plataformatec/devise

Если вам необходимо пройти аутентификацию против какого-либо внешнего api, посмотрите здесь
https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP
http://4trabes.com/2012/10/31/remote-authentication-with-devise/

+0

Благодарим вас за ответ. Моя проблема в том, что я не могу использовать gem как Devise, потому что все данные для моего приложения поступают из базы данных api. поэтому мне не нужно создавать активную модель записи. Вот почему я все проверил с нуля. –

+0

См. Мой улучшенный ответ –

0

Я получил следующее простое решение.

Я добавил один простой метод в application.rb. он работал хорошо.

class ApplicationController < ActionController::Base 
    before_filter :session_expires 

    MAX_SESSION_TIME = 60 * 60 

    helper_method :current_user? 

    protected 

    def current_user? 
     if session[:user_id].nil? 
     false 
     else 
     true 
     end 
    end 

    def authorize 
     unless current_user? 
     flash[:error] = "Please Login to access this page !"; 
     redirect_to root_url 
     false 
     end 
    end 

    def session_expires 
     if !session[:expire_at].nil? and session[:expire_at] < Time.now 
     reset_session 
     end 
     session[:expire_at] = MAX_SESSION_TIME.seconds.from_now 
     return true 
    end 


    protect_from_forgery 
end 
Смежные вопросы