2009-09-11 6 views
0

Mon but est de permettre aux utilisateurs d'une application Web Rails de voir toutes leurs sessions ouvertes sur d'autres ordinateurs et de les fermer/se déconnecter à distance. Similaire à la page "Activité du compte" de gmail (lien trouvé en bas de la page de la boîte de réception Gmail).Ruby on Rails: comment utiliser les sessions pour implémenter la déconnexion à distance?

je peux réaliser techniquement cela en utilisant les sessions dans la base de données

account_sessions = CGI::Session::ActiveRecordStore::Session.find(:all) 

et itérer sur eux pour trouver des sessions correspondant à l'utilisateur courant (l'ID utilisateur est stocké dans les données de session), et permettant à la utilisateur pour détruire ces sessions. Cependant, cela n'offre pas la commodité habituelle de travailler avec les modèles Rails. Je ne peux pas exprimer facilement une relation has_many avec l'utilisateur et utiliser

current_user.sessions 

ne puis-je mettre facilement un index sur user_id car il est dans la partie de données de la session (au lieu d'être sa propre colonne).

Cette approche peut également devenir impossible si le nombre de sessions augmente, puisque dans ce qui précède, la table est lue en mémoire. En guise de solution, je pense à créer mon propre modèle qui «reflète» les parties pertinentes de la session et qui est créé/mis à jour/détruit pour maintenir cette correspondance.

Ce n'est pas un excellent moyen d'y parvenir en raison de la réplication de données et de la complexité du code, mais je n'ai pas trouvé un autre moyen de le faire. Donc, la question est: est-ce une bonne façon d'y arriver, ou est-ce que je manque quelque chose?

Merci d'avance!

Fraser

Edit: Je l'ai dit que je suis actuellement en utilisant l'authentification reposant, et je préfère ne pas changer.

Répondre

0

Depuis authlogic offre un modèle de session utilisateur et est facilement extensible, vous devriez être en mesure d'atteindre exactement ce que vous voulez, si cela ne vous dérange pas de passer à un autre mécanisme d'authentification.

Modifier: This Railscast devrait vous donner un assez bon aperçu.