Question

J'utilise la version actuelle de restful_authentication que l'on trouve sur github et j'ai quelques problèmes de session étranges. Le serveur semble en quelque sorte attribuer des sessions aux utilisateurs, ce qui ne devrait pas être le cas. Cela ne se produit que lorsque vous franchissez la barrière déconnectée / connectée.

Voici un exemple. En l'absence de sessions actives sur le serveur, je me connecte à un compte avec l'utilisateur A. Sur un autre ordinateur, je me connecte avec l'utilisateur B. Ensuite, lors de la déconnexion de l'utilisateur B, peu de temps après la redirection de la déconnexion, je serai connecté en tant que utilisateur A. À partir de là, je peux continuer à naviguer sur le site comme si je m'étais connecté en tant qu'utilisateur! Ce que j'ai observé dans les journaux, c'est que lorsque ce détournement a lieu, les identifiants de session ne sont pas les mêmes. L'utilisateur A est connecté aux deux sessions, mais les identifiants de session sont complètement différents. Ce n'est qu'un exemple de ce qui pourrait arriver. Je ne peux pas reproduire le problème de manière fiable car il semble apparemment aléatoire.

Cela ne semble pas être un symptôme de l'environnement ou du serveur sur lequel il tourne. Je peux reproduire le problème en utilisant à la fois bâtard et passager. Je l'ai également vu dans le développement et la production. J'utilise des sessions basées sur la base de données dans cette application et elle s'exécute sur Rails 2.1.1. J'ai appliqué l'option stateful lors de l'appel du générateur. Sinon, aucune autre modification n’a été apportée à la gestion des sessions.

Mise à jour Voici la méthode incriminée directement issue de restful_authentication.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
Était-ce utile?

La solution 2

Je ne sais pas si c'est vraiment une réponse, mais plutôt un moyen de contourner le problème. Je n’ai fait que passer à des sessions basées sur les cookies et tout se passe bien.

Autres conseils

Cela peut arriver si vous (ou ceux qui ont écrit restful_authentication) mettez en cache l'utilisateur actuel dans une variable de classe. J'ai lu de nombreux articles préconisant l'utilisation de " Utilisateur.utilisateur_current ", mais comme les classes sont mises en cache dans les demandes, cela peut entraîner une altération de la session.

Ce site est-il distant? Vous y connectez-vous sur deux ordinateurs distincts du même réseau?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top