2011-07-19 45 views
0

我正在使用带注销超时的Authlogic。我需要做的是当用户实际超时时记录。我甚至试图制作一个线程,通知用户远离User.logged_in列表。 看来,当我把一个线程在那里我得到2线程,而不是一个,所以我正在寻找一个更好的解决方案。Authlogic。记录注销超时

这样做的最好方法是什么?

回答

0

我最终通过将以下在应用程序控制器的顶部固定我的线程。

def check_logout 
    previous_user = {} 
    loop { 
     x = User.logged_in 
     active_user = {} 
     x.each { |a| 
      active_user[a[:login]] = a[:login] 
      previous_user[a[:login]] = a[:login] 
     } 
     puts "active = #{active_user}" 
     previous_user.each { |key,value| 
     if active_user[key] == nil then 
      puts "Login timeout for #{value}" 
      InternalLog.notify_msg("Login timeout for #{value}") 
      previous_user.delete(key) 
     end 
     } 
     sleep(30)  
    } 
    rescue => e0 
     puts "WORKER THREAD RESCUE" 
     puts e0 
     exit  end 



    if $BACKGROUND_THREAD == nil then 
     $BACKGROUND_THREAD = Thread.new do 
      check_logout 
     end 
    end 
+0

对不起,我不似乎明白了为什么我的格式化搞砸(固定) –