设计退出

问题描述:

上次我问这个问题我被误解了。所以:设计退出

在我的Rails3应用程序中,我使用Devise进行身份验证。我有要求说,每个用户只能从一个浏览器登录。这意味着如果用户A登录(例如在FF上),然后从其他计算机或其他浏览器(例如Chrome)请求登录用户A,则应该注销第一个用户。

我发现,我可以重写SessionController并且它是create方法。然而,我没有看到任何方式来检查用户是否具有给定的电子邮件(params [:email])当前登录,此外我不知道应该调用哪种方法来销毁此用户会话。

我只是为会话中的每个页面加载存储一个时间戳。将before_filter与last_seen字段的用户进行比较。如果上次看到的用户在会话时间戳之后销毁用户会话。

+0

伟大而简单的想法。在我的版本中:对于用户模型的每个用户实例,当给定登录名的用户登录时,保留时间戳。另外,对于每个用户会话也保留时间戳。通过每个操作,检查模型中的时间戳是否等于会话中的时间戳。如果不是 - 销毁用户会话。 但是...如果给定的表单有正确的数据(电子邮件+密码正确),如何检查SessionsController的创建函数? 但... – 2011-06-10 10:35:14

+0

会话的身份验证由设计处理,您不需要根据您的要求修改它。我只是把before_filter放在application_controller.rb中,而不是修改devise。 – mark 2011-06-10 11:10:10

+0

我找到了其他方法 - 我们可以继承Devise :: SessionsController并覆盖它的after_sign_in_path_for动作。接下来,我注意到,当用户最后登录时显示的字段当前处于默认设计用户模型(current_user.current_sign_in_at) – 2011-06-10 11:45:52

我会采取的方法是修改trackable或lastseen插件,然后使用监督回调。

https://github.com/hassox/warden/wiki/Callbacks

不是一个伟大的答案,但也许可以让你开始。