2010-12-13 8 views
6

Google App Engineのユーザーサービスの仕組みに不思議です。私がそれを理解する方法では、ユーザーがログインした状態がクッキーに保存されます。クッキーを取得するには、httpサーブレット要求オブジェクト(少なくともJavaサーブレットの場合)が必要です。しかし、ユーザサービスAPIは入力としてHTTPサーブレットリクエストを必要としないので、ユーザがログインしているかどうかを確認するためにどのようにクッキーを取得しますか? Googleのサーブレット実装によって要求、ユーザー設定is handled中にGoogle App Engine User Serviceは内部的にどのように動作しますか?

ティム

答えて

3

[I] fユーザーがサインインし、リクエストオブジェクトのgetUserPrincipal()メソッドを使用して、標準サーブレットAPIを使用してユーザーの電子メールアドレスまたはOpenID識別子を取得します。

ログインプロセス中、OpenIDまたはOAuthと同様のリダイレクトを使用してサービスが機能します。ログインプロセス中のURLを見てください。

    ユーザーがあなたのアプリには、App Engineによって処理されるURL、何かのようにリダイレクトされ

  1. :よう

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomethingログインハンドラは、Googleのログインサービスにリダイレクト

  2. 、何か:あなたはログイン

    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. 、GoogleはあなたのBAをリダイレクトApp EngineのログインハンドラにCK:

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

    Googleはリダイレクトすると、いくつかのクエリパラメータは、App Engineのログインハンドラに渡され、内蔵のログインハンドラクッキーを設定します。

  4. 次に、指定したURLまたは「どこから始めた」URLにリダイレクトされます。以下のような何か:

    http://app.appspot.com/dosomething

3

何以降の呼び出しでは?例えば、(あなたのポイント4から継続)

  1. ユーザーは、サーブレットdosoemthingelseでサーブレットhttp://app.appspot.com/dosomethingelse

を呼び出して、私は再びこのUserServiceのインスタンスがどのようにこの

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

ようUserServiceのを呼び出すことができます現在ログインしているユーザーは誰かを知るためにCookieを取得しますか?

関連する問題