AuthLogic perishable_token сбрасывается при каждом запросе - PullRequest
6 голосов
/ 25 мая 2010

В моей модели пользователя у меня есть:

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 минут ???

1 Ответ

9 голосов
/ 25 мая 2010

perishable_token_valid_for не делает то, что вы думаете.Он предназначен для работы в тандеме с find_using_perishable_token, который предназначен для таких вещей, как проверка учетной записи и сброс забытого пароля.Время ожидания по умолчанию составляет 10 минут.

Токен должен обновляться при каждом запросе, как это происходит.Вы можете просто удалить столбец, если вы этого не хотите.Это полностью опционально с authlogic.

Если вы действительно хотите сохранить скоропортящийся токен, но полностью обновить его вручную, вы можете сделать disable_perishable_token_maintenance = true

...