2010-12-13 10 views
6

Ich bin nur neugierig auf die Funktionsweise des Google App Engine-Nutzerservices. So wie ich es verstehe, wird der Benutzer-Login-Status im Cookie gespeichert. Um das Cookie zu erhalten, muss man ein HTTP-Servlet-Anfrageobjekt haben (zumindest für Java-Servlet). Aber die Benutzer-Service-API benötigt keine http-Servlet-Anfrage als Eingabe, also wie erhält sie das Cookie, um zu überprüfen, ob der Benutzer angemeldet ist oder nicht?Wie funktioniert der Google App Engine-Benutzerdienst intern?

Tim

Antwort

3

Während Anfragen, Benutzereinrichtung is handled von Google-Servlet-Implementierung. unter Verwendung des Standard-Servlet-API mit dem Bitte Objekt getUserPrincipal() Methode

[I] f der Benutzer angemeldet ist, und den E-Mail-Adresse oder OpenID Identifikator des Benutzers zu erhalten.

Während des Anmeldevorgangs arbeitet der Dienst mithilfe von Weiterleitungen, ähnlich OpenID oder OAuth. Sehen Sie sich die URLs während des Anmeldevorgangs an.

  1. Benutzer zu einer URL umgeleitet werden, die von App Engine, auf Ihrer Anwendung gehandhabt wird, so etwas wie:

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

  2. Die Login-Handler wie den Google-Login Service, etwas umleitet :

    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. Sie anmelden, dann leitet Google Sie ba ck auf die Login-Handler App Engine

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

    Bei Google umleitet, werden einige Abfrageparameter an den Motor Login Handler App übergeben werden, und die sich im internen Login-Handler wird das Cookie gesetzt.

  4. Sie werden dann zu der URL weitergeleitet, die Sie angegeben haben oder von der Sie "gestartet" haben. Etwas wie:

    http://app.appspot.com/dosomething

3

Was die in den nachfolgenden Anrufe? Zum Beispiel (Fortsetzung von Ihrem Punkt 4)

  1. Benutzer ruft das Servlet http://app.appspot.com/dosomethingelse

Im Servlet dosoemthingelse, kann ich wieder Userservice nennen wie diese

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

Wie funktioniert diese Userservice Instanz fragt den Cookie, wer der aktuell angemeldete Benutzer ist?

Verwandte Themen