Google App Engine では、Google インフラ上のいくつかの便利なサービスを使用できます。 このサービスにはApp Engine Python SDKを含むライブラリを使用したアプリケーションからアクセスできます。 そのようなサービスの一つにUsers サービスがあります。これを使うと、あなたのアプリケーションと Google ユーザーアカウントを統合することができます。 Users サービスでは、ユーザーは既にログインしている Google アカウントをアプリケーションで使用できます。
それでは、 Users サービスを使ってアプリケーションでの挨拶をパーソナライズしてみましょう。
今回もhelloworld/helloworld.py
を編集し、中身を以下のように書き換えます:
from google.appengine.api import users import webapp2 class MainPage(webapp2.RequestHandler): def get(self): # Checks for active Google account session user = users.get_current_user() if user: self.response.headers['Content-Type'] = 'text/html; charset=utf-8' self.response.write('Hello, ' + user.nickname()) else: self.redirect(users.create_login_url(self.request.uri)) app = webapp2.WSGIApplication([ ('/', MainPage), ], debug=True)
ブラウザー上でページを再読み込みしてください。テスト用に用意されたGoogleログインページのローカルバージョンにリダイレクトされます。
この画面で任意のユーザー名を入力でき、ユーザー名に応じて仮のUser
オブジェクトが表示されます。
アプリケーションがApp Engine上で動作している場合はユーザーはGoogle アカウントのログインベージに送られ、ログインもしくはアカウントの作成に成功するとアプリケーションに送り返されます。
それでは、新しく追加したコードを詳しく見てみましょう:
# Checks for active Google account session user = users.get_current_user()
ユーザーが既にアプリケーションにログインしている場合は、get_current_user()
はそのユーザーのUser
オブジェクトを返します。
ログインしていない場合はNone
を返します。
if user: self.response.headers['Content-Type'] = 'text/html; charset=utf-8' self.response.write('Hello, ' + user.nickname())
ユーザーがログインしている場合は、パーソナライズされたメッセージが表示されます。このメッセージでは、ユーザーアカウントと関連のあるニックネームが使用されます。
else: self.redirect(users.create_login_url(self.request.uri))
ユーザーがログインしていない場合は、 ユーザーをGoogle アカウントログイン画面へリダイレクトするようwebapp2
に指示をします。
このself.redirect
にはこのページの情報(self.request.uri
)も含まれているので、
ユーザーがログインしたり新規アカウント登録した後に、Google アカウントログイン側の処理機構はユーザーをアプリケーションのページへ送り返すことができます。
Users APIに関する詳細情報については、Users リファレンスを参照してください。