2010-06-02 6 views
2

Est-il possible de forcer Google à créer une seule session pour un seul utilisateur?Restreindre une session unique pour un utilisateur dans un compte google

J'ai créé des services dans GAE, qui utilise google id pour authentifier les utilisateurs. Maintenant, un seul utilisateur créant plusieurs sessions à partir de plusieurs PC en partageant son nom d'utilisateur/mot de passe. Je veux limiter cela.

En langage simple après la connexion réussie l'application devrait se déconnecter de toutes les autres session pour cet utilisateur.

Dans Gmail, il y a un lien au bas de la page par le nom de la dernière activité. En cliquant sur les détails, il affiche les sessions en cours et permet également de se déconnecter d'autres sessions . Je veux la même fonctionnalité par programme.

Il existe une option de plus: avant la connexion, détecter si l'utilisateur est déjà connecté ?

Jetez un oeil à ce

http://mail.google.com/support/bin/answer.py?ctx=%67mail&answer=45938

see sessions simultanées

Si cette information est accessible en quelque sorte que je peux prendre des mesures appropriées.

Répondre

3

C'est certainement possible. Si vous utilisez des comptes Google pour l'authentification, un utilisateur se connecte en publiant ses informations d'identification sur Google, et Google renvoie un jeton d'authentification à votre site, qui est ensuite stocké en tant que cookie dans le navigateur de l'utilisateur. Le jeton est bon jusqu'à ce que le cookie expire (24 heures par défaut) ou jusqu'à ce que l'utilisateur se déconnecte.

Si vous voulez suivre plusieurs sessions de connexion, vous pouvez écrire des gestionnaires conçus pour s'exécuter après la connexion ou la déconnexion. Si votre URL de retour après connexion est "/ do_stuff", vous pouvez la remplacer par "/ finish_login? Next =% 2Fdo_stuff". Dans ce gestionnaire, vous pouvez créer une entité dans le magasin de données représentant la session, avec une référence au compte Google, l'adresse IP qui s'est connectée et l'horodatage de connexion (horodatage actuel). Vous pouvez écrire la clé d'entité de session dans un autre cookie dans le navigateur de l'utilisateur. Lorsque vous avez terminé, redirigez-vous vers l'URL "suivante". Après la déconnexion, vous pouvez avoir un gestionnaire similaire qui vérifie le cookie de clé d'entité de session, supprime l'entité et supprime le cookie.

Si vous souhaitez montrer à l'utilisateur qu'il est connecté à partir de plusieurs emplacements, recherchez les entités de session associées à son compte Google qui datent de moins de 24 heures (ou quelle que soit l'expiration de votre cookie définie).

Si vous souhaitez vous déconnecter à distance d'une autre session, vous devrez peut-être écrire votre propre version du décorateur login_required que Google propose dans webapp.util.Votre version doit vérifier que l'utilisateur est connecté, vérifier qu'il a envoyé un cookie de clé de session et vérifier que l'entité associée existe toujours et qu'elle appartient au compte correct.

+0

+1 pour une telle explication. Mais écrire un code pour gérer la session semble être long à ce moment-là. Y a-t-il un moyen plus simple? API associée fournie par google pour vérifier combien de sessions simultanées sont créées pour l'utilisateur actuel? – Manjoor

+0

AFAIK cette fonctionnalité n'est exposée par aucune des API officielles. Il pourrait y avoir des bibliothèques open source qui offrent un comportement similaire, mais je n'en connais aucune. –

2

Rien ne vous empêche de stocker les informations de connexion dans le service de données Google App Engine. En conséquence, vous pouvez stocker tous les détails de connexion pour un utilisateur dans son objet associé. En conséquence, je dirais qu'il n'y a pas de différence entre GAE et une application web traditionnelle - excepté que vous allez stocker des informations de connexion dans la base de données, au lieu de laisser votre interface web le gérer.

+0

Hmmm Je le sais. Ma question est de restituer plusieurs connexions à partir de plusieurs endroits en utilisant le même identifiant. Ou exprire une autre session enregistrée lorsqu'une nouvelle session est créée? – Manjoor

+0

Je ne comprends pas ... Vous voulez avoir un exemple d'un tel code? Vous voulez choisir entre les deux? – Riduidel