44 votes

Devise Remember Me et Sessions

Je suis confus avec les paramètres de configuration de gemme de carte:

   # 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
 

Je souhaite qu'un utilisateur sélectionne la case à cocher "Mémoriser mes informations" (par exemple, restez connecté), mais le délai d'expiration de la session par défaut est de 10 minutes. Après 10 minutes, il me demande de me reconnecter même si j'ai cliqué sur "Mémoriser mes informations". Si cela est vrai, alors le Remember_for n'a pas de sens. De toute évidence, il me manque quelque chose ici.

27voto

douglasr Points 1220

Ryan est correct en ce que la valeur par défaut Concevoir gem ne prend pas en charge à la fois :rememberable et :timeoutable options. Cependant, comme toutes les choses Ruby, si vous n'aimez pas la décision que certains autres codeur a fait, surtout quand il s'écarte de la norme que la plupart des utilisateurs sont susceptibles de s'attendre, alors vous pouvez simplement le remplacer.

Grâce à un (rejeté) tirez sur demande , nous pouvons remplacer ce comportement en ajoutant le code suivant en haut de Concevoir votre fichier de configuration (/config/initializers/concevoir.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

Cela vous permet de configurer les options et les faire travailler comme vous le souhaitez.

config.remember_for = 2.weeks
config.timeout_in = 30.minutes

17voto

Ryan Bigg Points 64561

Les timeout_in vous déconnecteront automatiquement dans les 10 minutes d'inactivité et sont incompatibles avec la case à cocher remember_me . Vous pouvez en avoir un, mais pas les deux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X