À un certain point mystérieux X avec cette application Rails hébergée sur heroku, un utilisateur connecté était soudainement connecté en tant qu'un autre utilisateur. J'utilise la pierre précieuse pour l'authentification.
Cela s'est produit pour 2 utilisateurs que nous connaissons. Je suis actuellement à la recherche de la cause fondamentale de ce problème.
Ce que je dois faire maintenant, c’est invalider toutes les sessions d’élaboration afin de forcer les utilisateurs à se connecter à nouveau. Une fois qu'un utilisateur s'est connecté, le problème semble disparaître.
J'ai essayé de réinitialiser secret_token mais je n'ai pas été obligé de me connecter à nouveau. J'ai ensuite réduit mes dynos Web, puis mes sauvegardes. J'ai aussi redémarré l'application. Tous essayant d'obtenir le changement secret_token pour réinitialiser les sessions.
D'autres idées?
Changer votre session_token fonctionnera si vous stockez vos sessions dans des cookies (par défaut).
Mais si vous stockez dans active_record, vous pouvez supprimer toutes les sessions en:
rake db:sessions:clear
alors: BAM! pas plus de sessions.
Vous devriez pouvoir modifier le nom du cookie de session pour invalider toutes les sessions hébergées dans config/initializers/session_store.rb.
YourApp::Application.config.session_store :cookie_store, key: '_change_me_session'
Si vos sessions ne stockent aucune autre information critique, vous pouvez effacer les sessions:
rake db:sessions:clear
Mise à jour sur la réponse acceptée, maintenant c'est
rake tmp:clear
rake -T
...
rake tmp:create # Creates tmp directories for sessions, cache, sockets, and pids
Devise a une chose appelée timeoutable pouvez-vous travailler avec ça?
Check-out
module ClassMethods
Devise::Models.config(self, :timeout_in)
end
Je suppose que vous pourriez faire quelque chose comme:
User.all.each do |user|
user.timeout_in 1.second
end
Mais je ne sais pas si cela ne gère que les nouvelles sessions… et non les sessions existantes?
En fait, c’est trop complexe .. essayez juste:
User.all.each do |user|
sign_out user
end
Voir ce message Déconnectez tous les utilisateurs avec Devise
pour faire quelque chose comme ça depuis la console, vous devrez vérifier cet exemple et l’ajuster à vos besoins
Comment connecter un utilisateur à l'aide de Devise à partir d'une console Rails?
Lorsque le magasin de cookies est utilisé, nous devons régénérer l'application secret_token utilisée pour chiffrer les cookies.
fichier à configurer secret_token: config/initializers/secret_token.rb
bundle exec rake secret
Peut être utilisé pour générer un nouveau jeton secret.
https://www.tigraine.at/2012/08/03/how-to-expire-all-active-sessions-in-Rails-3
Déconnectez tous les utilisateurs ou portées actifs. Cet assistant est utile pour déconnecter tous les rôles en un clic. Cela permet de signer TOUTES les étendues du gardien. Renvoie true s'il y a eu au moins une déconnexion et false si aucun utilisateur n'a été connecté sur toutes les étendues.
source: http://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/SignInOut