在我的用户模型中,我有:
acts_as_authentic do |c|
c.perishable_token_valid_for = 30.minutes
end
在我的应用程序控制器中,我有标准的样板代码:
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
现在在我看来,我需要查看用户是否已登录:
<% if current_user %>
Sign Out
<% else %>
Sign In
<% end %>
在每个请求中,都会调用current_user,这会导致对数据库进行SELECT调用以查找用户,然后进行更新last_request_at和perishable_token的UPDATE调用,即使我设置了perishable_token_valid_for = 30.minutes。
是否有人有更好的方法来查看用户是否登录而不会在我的应用的每个页面上导致SELECT和UPDATE。
有人知道为什么即使我将易腐品牌设定为有效30分钟,易腐品牌也会不断更新???
答案 0 :(得分:9)
perishable_token_valid_for
并没有按照您的想法行事。它旨在与find_using_perishable_token
协同工作,用于帐户验证和重置忘记密码等内容。默认超时为10分钟。
令牌应该在每次请求时更新,就像它正在做的那样。如果您不想要它,您可以删除该列。它是完全可选的authlogic。
如果你真的想保留易腐坏的令牌但是手动完全更新,你可以disable_perishable_token_maintenance = true