我的目标是在60分钟后超时管理会话,并在5天后让普通用户超时。我有一个使用Authlogic进行身份验证的User模型。users表有一个名为"role"的列,它接受一个字符串。
t.string "role"
当用户是admin时,role将包含字符串'admin'。我想过扩展logged_in_timeout
,但还没有弄清楚如何使其工作。我看过的另一种方法是创建多个会话并使:admin会话超时更快,但再一次……我不确定如何实现这一目标,因为两个会话都将引用相同的用户模型。以下是我的文件:
class User < ActiveRecord::Base
acts_as_authentic do |config|
config.login_field = :email
config.logged_in_timeout = 5.days
end
end
会话模式:class UserSession < Authlogic::Session::Base
logout_on_timeout true
end
UserSessionsController是标准的,有新的create和destroy方法。任何见解将不胜感激,谢谢!
这是我找到的解决方案。我确实从authlogic扩展了logged_in_timeout
的定义来使用这个新逻辑。我在User模型中这样做了:
class User < ActiveRecord::Base
acts_as_authentic do |config|
config.login_field = :email
config.logged_in_timeout = 5.days
end
<...>
def logged_in_timeout
if self.role == 'admin'
60.minutes
else
self.class.logged_in_timeout
end
end
end