【问题标题】:AuthLogic perishable_token resets on every requestAuthLogic perishable_token 在每个请求上重置
【发布时间】:2010-05-25 02:37:53
【问题描述】:

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

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 调用以查找用户,然后进行 UPDATE 调用以更新 last_request_at 和 perishable_token,即使我设置 perishable_token_valid_for = 30.minutes。

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

  2. 有谁知道为什么即使我将易腐令牌设置为有效期为 30 分钟,它也会不断更新???

【问题讨论】:

    标签: ruby-on-rails ruby authlogic


    【解决方案1】:

    perishable_token_valid_for 没有按照你的想法做。它旨在与find_using_perishable_token 协同工作,用于帐户验证和重置忘记的密码等事情。默认超时为 10 分钟。

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

    如果您确实想保留易腐令牌但要完全手动更新它,您可以这样做disable_perishable_token_maintenance = true

    【讨论】:

    • 好的,我正在尝试使用 perishable_token 来允许访问特定页面仅 10 分钟...关于如何完成此操作的任何建议?
    • 无需添加新模型,不确定。不过,您始终可以保留对该页面的访问列表,并对其进行检查。
    • 使用 find_using_pt 的帐户验证/重置密码是否仍然可以在没有 pt 列的情况下使用?如果不是,那是另一种方式吗?我遇到了同样的问题,我想使用 pt 进行验证/重置,而不是在每次请求时都看不到此更新。谢谢
    • 这个的完整字符串是什么? disable_perishable_token_maintenance = true我尝试了很多不起作用的东西。 Authlogic::ActsAsAuthentic::PerishableToken::Config.disable_perishable_token_maintenance 不起作用。
    • Trip,查看gist.github.com/aa8ca563604187fcbe62,了解我在生产中运行的应用程序中所做的示例。
    猜你喜欢
    • 2011-08-12
    • 1970-01-01
    • 2012-05-09
    • 2021-05-30
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多