【Google App Engine】 Users Python API Overview（日本語訳）

[原文](https://cloud.google.com/appengine/docs/python/users/)
誤訳等あれば、ご指摘頂ければ幸いです。

　App Engineのアプリケーションは、Googleアカウントまたは、Google Appsドメインのいずれかを使用してユーザー認証をすることができます。アプリケーションは、ユーザーがサインインしているかどうかを把握することができ、ユーザーをサインインページにリダイレクトさせたり、アプリケーションがGoogleアカウント認証を使用している場合は、新しいアカウントを作成させることができます。ユーザーがサインインしているときは、アプリは当該ユーザーのメールアドレスやユーザーIDにアクセスすることができます。アプリは、当該ユーザーが管理者かどうかを判断し、管理者専用エリアを簡単に作成することができます。

#Pythonでのユーザー認証
　下記のサンプルは、アプリケーションにサインインしているユーザーに、パーソナライズされたメッセージで挨拶し、サインアウトのリンクを提示するものです。もし、ユーザーがサインインしていない場合、アプリケーションはGoogleアカウントでサインインするためのリンクを提供します。

```py
from google.appengine.api import users
import webapp2

class MyHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if user:
            greeting = ('Welcome, %s! (<a href="%s">sign out</a>)' %
                        (user.nickname(), users.create_logout_url('/')))
        else:
            greeting = ('<a href="%s">Sign in or register</a>.' %
                        users.create_login_url('/'))

        self.response.out.write('<html><body>%s</body></html>' % greeting)
```
##サインインの要求とapp.yamlへの管理者アクセス
　サインインしているユーザーのみにページへのアクセスを許可したいのであれば、それらのページにはサインインが必要である旨をapp.yamlファイルに設定することができます。ユーザーがサインインが必要なページにサインインしないままアクセスしてきた場合には、App EngineはユーザーをGoogleのサインインページにリダイレクトさせ、サインイン又は新規登録後のユーザーを元のアプリケーションページに戻します。
　アプリケーションの管理者のみにアクセスを許可する設定をすることもできます。これは、別途認証システムを設けることなく、ただ単にサイト内に管理者限定のセクションを設けるだけでできます。
　URL毎にアクセス権限を設定する方法については、[Requiring login or administrator status](https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Requiring_login_or_administrator_status)を参照のこと。

#認証のオプション　
　認証にあたり、下記のオプションを用いることができます。

 - Googleアカウント
 - Google Appsドメインのアカウント

##認証のオプションの選択
　アプリケーション作成後、認証のオプションを選択できます。デフォルトでは、Googleアカウントを認証に用いることになっています。Google Appsドメイン等の他のオプションを用いるためには、Google Cloud Platform Console内の当該プロジェクトの設定ページに行き、Editをクリックしてください。Google authentication dropdown menuで、必要な認証タイプを選択し、Saveをクリックしてください。

#サインインとサインアウト
　アプリケーションは、ユーザーがサインインしているかを判定することができます。もし、ユーザーがサインインしていない場合には、アプリケーションはユーザーをGoogleアカウントのサインイン又は新規登録するためのページに飛ばします。アプリケーションは、Users APIのメソッドを呼び出すことで、サインインページのURLを取得することができます。アプリケーションは、このURLリンクを表示し、ユーザーに認証を要求したページにリダイレクトするためのHTTPも発行します。
　GoogleアカウントかGoogle Appsを認証に用いていた場合、サインイン時にサインインページにアプリケーション名が表示されます。アプリケーション名は、Google Cloud Platform Console のプロジェクトページで、変更することができます。鉛筆のアイコンをクリックして、プロジェクトの名前を変更してください。
　ユーザーが既にサインインしている場合やGoogleアカウントの登録をしていた場合は、ユーザーはアプリケーションにリダイレクトされます。アプリケーションはサインインURLを生成するメソッドにリダイレクトするURLを発行します。
　Users APIは、サインアウトするためのURLも生成します。サインアウトURLは、ユーザーのアクセス権限を奪い、アプリケーションURLにリダイレクトさせますが、何も表示されなくなります。
　ユーザーは、アプリケーションにアカウントメールアドレスとパスワードを入力しない限り、サインインすることができません。他のアプリケーションにGoogleアカウントを用いてサインインしていた場合は、この限りではありません。

#アカウント情報へのアクセス
　ユーザーがアプリケーションにサインインしている間、アプリケーションは、ユーザーがアプリケーションにリクエストを出す時には、当該ユーザーのメールアドレスにアクセスすることができます。同様に、ユーザーがアカウントのメールアドレスを変更しない限り、ユーザーを特定するためのユーザーIDにもアクセスできます。

#Usersとデータストア
　User service APIは、当該ユーザーの情報をUser Objectとして返します。User Objectはデータストアに保存できますが、これにはユーザーのメールアドレスやユーザーIDが含まれるため、データストアに保存しないことを強く勧めます。もし、ユーザーがメールアドレスを変更すると、保存されているユーザー情報と新しいユーザー情報が合致しないようになってしまうからです。そのため、別途ユーザーのIDを設ける方が良いでしょう。

#Googleアカウントと開発サーバ
　開発サーバは、ダミーのサインイン画面を使って、Googleアカウントシステム類似の環境を提供します。アプリケーションがサインイン画面でUsers APIを呼び出すと、APIは開発サーバにメールアドレスを入力するプロンプトのURLを返します。これにはパスワードは不要です。これにはどのようなメールアドレスも入力でき、アプリケーションはあなたがそのメールアドレスでサインインしたものとして扱います。
　ダミーのサインイン画面は、そのダミーアカウントが管理者としてサインインするかどうかを指示するチェックボックスも表示します。チェックすると、アプリケーションはあなたを管理者アカウントとして扱います。
　同様に、Users APIは、ダミーのサインインをキャンセルするためのサインアウトURLを返します。
　開発サーバのUser Objectにおける固有のIDは、メールアドレスによって割り出します。開発サーバにおける２つの別個のメールアドレスは、常に別個のユーザーとして扱われます。