2010-02-04 10 views
5

Kullanıcı oturumunun süresi dolduğunda düzenli olarak kontrol etmemi sağlayan bir çözüm arıyorum ve eğer öyleyse onu giriş sayfasına yönlendirin.
Authlogic gem kullanıyorum, yaptığım şey current_user üzerinde bir test yapan bir işlevi çağırmaktır.
USER_SESSION_TIMEOUT'ım 5minutes, bu yüzden her 5:10 dakikada bir ajax araması yapıyorum. Ruby on raylar - Authlogic: kullanıcı oturumunun geçerli olup olmadığını periyodik olarak kontrol edin


def check_session_timed_out 
    if !current_user 
     flash[:login_notice] = "Your session timed out due to a period of inactivity. Please sign in again." 
     render :update do |page| 
      page.redirect_to "/user_sessions/new" 
     end 
    else 
     render :nothing => true 
    end 
end 

<%= periodically_call_remote :url => {:controller => 'user_session', :action => 'check_session_timed_out'}, :frequency => (USER_SESSION_TIMEOUT + 10.seconds) %> 

Ben kullanıcı nesnesi örnein diyoruz her zaman güncellenir fark ve böylece oturum 5 dakika yenilenir.
Yalnızca bir sekme açıldığında sorun yok, ancak her seferinde 2 sekmesi varsa, check_session_timed_out current_user çağrısı kullanıcıyı günceller ve oturumun süresi hiç bitmez.

herhangi bir fikir? Teşekkür

AuthLogic source itself itibaren

cevap

5

: Senin durumunda

# For example, what if you had a javascript function that polled the server 
# updating how much time is left in their session before it times out. Obviously 
# you would want to ignore this request, because then the user would never 
# time out. So you can do something like this in your controller: 

def last_request_update_allowed? 
action_name != "update_session_time_left" 
end 

, kendi eyleminin adını kullanarak kontrolöre yöntemi eklemek isterim:

def last_request_update_allowed? 
    action_name != "check_session_timed_out" 
end 
+0

MERCI! Bu mükemmel – Mathieu

6

Authlogic yapabilirsiniz bu senin için.

acts_as_authentic do |c| 
    c.logged_in_timeout(5.minutes) 
end 

... ve UserSession modeline: kullanıcı modeli üzerinde

:

self.logout_on_timeout = true 

Ve sadece işe Sadece modellerinde kullanmak! = D

İlgili konular