Google App Engine であそんでみよう. (4)

Users API

Google App Engine ではユーザ管理用のAPIが提供されている. ただしこのAPIのユーザアカウントは, Google のアカウントなので, 独自の名前空間を持つものを設計したい場合には, 独自になんとかしなければならない.
APIの使い方はすごく簡単.

from google.appengine.api import users

class MainPage(webapp.RequestHandler):
  def get(self):
    user = users.get_current_user()
    if not user:
      self.redirect(users.create_login_url("/"))
    else:
      self.response.headers['Content-Type'] = 'text/plain;charset=UTF-8'
      self.response.out.write('Hello, ' + user.nickname())

users.get_current_user() でユーザ情報をUserオブジェクトとして取り出す. ログインしていなければ Noneが返るので, users.create_login_url("/") で生成されるログインページにリダイレクトしている. この関数の引数はログイン終了後にリダイレクトされるページ. Userオブジェクトには nickname() と email() メソッドが定義されている. nicknameがないユーザに対しては nickname()メソッドはメイルアドレスを返す.
create_logout_url(URL) という関数もあってこちらは, 現在実行中のユーザをサインアウトさせたあと, URLにリダイレクトする.

また, 管理ユーザという概念がある. これは管理コンソールにアクセスする権限をもったユーザのことだが, この管理ユーザかどうかを判定するAPIも用意されている. users.is_current_user_admin() 関数は現在ログインしているユーザが管理ユーザの場合にTrueを返す.

また, 一部のページを管理ユーザのみがアクセスできるように設定することも可能. これにはYAMLで記述するアプリケーションの設定ファイルを用いる.

handlers:
- url: /admin/.*
  script: admin.py
  login: admin

と書いておくと, admin以下のページは, 自動的に管理ユーザのみが利用できるようになる. よくできてるなあ.