2013-11-27 27 views
0

我想创建一个rake任务或一个工具来销毁所有在每天晚上大约晚上9点左右的时候从CLI调用的活动会话。如何强制在特定时间关闭会话?

我发现Devise有能力指定超时。我使用Devise进行用户会话。尽管他们的系统在一小时内仍然处于非活动状态,但大约三分之一的用户会话永远不会超时。

我不知道我需要什么样的工作。反馈将是一个加号。也可能是文档的一些链接。另外,我无法弄清楚如何定位会话来销毁它们。 Rails指南等不清楚它是否会破坏一个用户的会话或所有服务器 - 客户端会话。我需要停用所有客户端 - 服务器会话。文档很棒,但我喜欢一些很好的解释。

+0

不知道为什么你会想永远在特定时间复位会话...强制用户记住他们的用户名和密码从来都不是一件好事。无论如何,这个其他问题应该可以帮助你:http://stackoverflow.com/questions/16406208/how-can-i-reset-all-devise-sessions-so-every-user-has-to-login-again – Ashitaka

+0

对于'计时卡'系统。这不是强迫他们记住他们的凭据,更多的是关于追踪他们登录和注销的时间 - 但是如果他们从未注销,则这一点将全部丢失。我喜欢改变会话的想法,但似乎你必须实际手动改变config/initializers/session_store脚本。我的第一个想法是制作一个脚本,使用随机生成的键值自动更改脚本 - 但随后版本控制几乎不在窗口中。根据你的了解,有没有什么方法可以解决这个问题 – Crash

+0

但是,如果您强制注销,您仍然不知道用户注销的实际时间。在我看来,你真正想要的是跟踪登录时间。 – Ashitaka

回答

1

您可以将您的secret_key存储在ENV变量中。事实上,你应该尽量让你的secret_token远离源代码控制。所以你应该有一个你可以在运行时改变的ENV变量。像这样:

YourApp::Application.config.secret_token = ENV['SECRET_TOKEN'] 

要创建一个安全令牌,您应该使用SecureRandom.hex(64)。

但无论如何,如果你想要的只是跟踪用户访问该网站时,你可以创建一个before_filter,在某些操作之前运行。一个简单的例子是:

class ApplicationController < ActionController::Base 
    before_filter :save_time_of_last_visit 

    def save_time_of_last_visit 
    current_user.touch(:last_sign_in_at) if user_signed_in? 
    end 
end 
+0

由于已经分配了更重要的项目,我还没有机会对此进行测试,但我相信这应该是我需要的。标记为我的答案,并再次感谢! – Crash

0

如果使用memcache存储会话,则可以创建一个cron任务来重新启动它。

相关问题