2010-12-13 81 views
6

Je suis simplement curieux de connaître le fonctionnement du service utilisateur de Google App Engine. De la façon dont je le comprends, l'état de l'utilisateur connecté est stocké dans le cookie. Pour obtenir le cookie, il faut avoir un objet de demande de servlet http (pour le servlet java au moins). Mais l'API du service utilisateur ne nécessite aucune requête de servlet http en entrée, alors comment obtient-il le cookie pour vérifier si l'utilisateur est connecté ou pas?Comment le service utilisateur de Google App Engine fonctionne-t-il en interne?

Tim

Répondre

3

Lors de demandes, la configuration de l'utilisateur is handled par la mise en œuvre de servlet de Google. [I] f l'utilisateur est connecté et obtient l'adresse e-mail ou l'identifiant OpenID de l'utilisateur à l'aide de l'API de servlet standard, avec la méthode getUserPrincipal() de l'objet de requête. Au cours du processus de connexion, le service fonctionne à l'aide de redirections, similaires à OpenID ou OAuth. Jetez un oeil sur les URL tout au long du processus de connexion.

  1. Les utilisateurs sont redirigés vers une URL, qui est gérée par App Engine, sur votre application, quelque chose comme:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

  2. Le gestionnaire de connexion redirige vers le service de connexion Google, quelque chose comme :

    https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://app.appspot.com/_ah/login%3Fcontinue%3Dhttp://app.appspot.com/dosomething&ltmpl=gm&ahname=Your+App+Name&sig=hf3322hdsk98fd8fh3u29hfh24as

  3. vous connectez, Google vous redirige ba ck au gestionnaire de connexion du moteur de l'application:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

    Lorsque Google réoriente, certains paramètres de la requête seront transmis au gestionnaire de connexion App Engine, et le gestionnaire de connexion intégré fixeront le cookie.

  4. Vous êtes ensuite redirigé vers l'URL que vous avez indiquée ou d'où vous avez 'démarré'. Quelque chose comme:

    http://app.appspot.com/dosomething

3

Qu'en est-il dans les appels suivants? Par exemple (en continuant de votre point 4)

  1. utilisateur appelle le servlet http://app.appspot.com/dosomethingelse

Dans le servlet dosoemthingelse, je peux à nouveau appeler UserService comme ce

UserService userService = UserServiceFactory.getUserService(); 
User user = userService.getCurrentUser(); 
String userId = user.getUserId(); 

Comment fonctionne cette instance de UserService obtient le cookie pour savoir qui est l'utilisateur actuellement connecté?