Придумай Помни Меня и Сеансы - PullRequest
42 голосов
/ 18 февраля 2011

Я запутался с настройками конфигурации devise gem:

  # The time the user will be remembered without asking for credentials again.
  config.remember_for = 2.weeks

  # The time you want to timeout the user session without activity. After this
  # time the user will be asked for credentials again.
  config.timeout_in = 10.minutes

Я хочу, чтобы пользователь установил флажок «Запомнить меня» (т. Е. Оставил меня в системе), но время ожидания сеанса по умолчанию составляет 10 минут. Через 10 минут он просит меня войти снова, хотя я нажал «Запомнить меня». Если это правда, то помнить_для действительно бессмысленно. Очевидно, я что-то здесь упускаю.

Ответы [ 3 ]

28 голосов
/ 18 мая 2011

Райан прав в том, что гем Devise по умолчанию не поддерживает опции: памятный и: временный. Однако, как и все в Ruby, если вам не нравится решение, принятое каким-либо другим кодером, особенно если оно отклоняется от нормы, которую, вероятно, ожидает большинство пользователей, вы можете просто отменить это.

Благодаря (отклоненному) запросу на вытягивание мы можем отменить это поведение, добавив следующий код в начало вашего файла конфигурации Devise (/config/initializers/devise.rb):

module Devise
  module Models
    module Timeoutable
      # Checks whether the user session has expired based on configured time.
      def timedout?(last_access)
        return false if remember_exists_and_not_expired?
        last_access && last_access <= self.class.timeout_in.ago
      end

      private

      def remember_exists_and_not_expired?
        return false unless respond_to?(:remember_expired?)
        remember_created_at && !remember_expired?
      end
    end
  end
end

Теперь это позволит вам настроить оба параметра и заставить их работать так, как вы ожидаете.

config.remember_for = 2.weeks
config.timeout_in = 30.minutes
17 голосов
/ 18 февраля 2011

timeout_in автоматически выйдет из системы через 10 минут бездействия и несовместим с флажком remember_me.Вы можете иметь один, но не оба.

9 голосов
/ 24 июля 2015

Информация в предыдущих ответах устарела.Я протестировал свой проект, который использует Rails 4 и Devise 3.5.1 и , а также проверил код разработки , чтобы быть уверенным.

Теперь выглядит, установлен ли флажок Remember Me:

  • , если yes, он проверяет if remember_exists_and_not_expired, поэтому в основном использует config.remember_for для управления сеансом

  • если no, он проверяет if last_access <= timeout_in.ago, используя config.timeout_in соответственно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...