AuthLogic perishable_token会在每个请求中重置

go *_*mal 6 ruby ruby-on-rails authlogic

在我的用户模型中,我有:

acts_as_authentic do |c|
  c.perishable_token_valid_for = 30.minutes
end
Run Code Online (Sandbox Code Playgroud)

在我的应用程序控制器中,我有标准的样板代码:

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
Run Code Online (Sandbox Code Playgroud)

现在在我看来,我需要查看用户是否已登录:

<% if current_user %>
  Sign Out
<% else %>
  Sign In
<% end %>
Run Code Online (Sandbox Code Playgroud)

在每个请求中,都会调用current_user,这会导致对数据库进行SELECT调用以查找用户,然后进行更新last_request_at和perishable_token的UPDATE调用,即使我设置了perishable_token_valid_for = 30.minutes.

  1. 有没有人有更好的方法来查看用户是否登录而不会在我的应用程序的每个页面上导致SELECT和UPDATE.

  2. 有没有人知道为什么即使我将它设置为30分钟有效,易腐败令牌仍在不断更新?

x1a*_*1a4 9

perishable_token_valid_for没有按照你的想法去做.它旨在与find_using_perishable_token帐户验证和重置忘记密码等内容协同工作.默认超时为10分钟.

该令牌应该像它正在做的那样在每个请求上更新.如果您不想要它,您可以删除该列.它与authlogic完全可选.

如果你确实想要保留易腐坏的令牌但是手动更新它,你可以做到 disable_perishable_token_maintenance = true