User オブジェクト

User クラスのインスタンスはユーザーを表します。User インスタンスはユニークであり、比較が可能です。2 つのインスタンスが同じであれば、それは同じユーザーを表します。

アプリケーションは users.get_current_user() 関数を呼び出すことによって現在のユーザーの User インスタンスにアクセスできます。

user = users.get_current_user()

users.get_current_user() 関数は、アプリでどの認証オプションを使用する場合でも使用できます。

User インスタンスはメールアドレスからも作成できます。

user = users.User("Albert.Johnson@example.com")

また、federated_identity がある場合は、それを使用して User インスタンスを作成できます。

user = users.User(federated_identity="http://example.com/id/ajohnson")

有効な Google アカウントに対応していないメールアドレスを使用して User コンストラクタが呼び出された場合、オブジェクトは作成されても実際の Google アカウントには対応しません。こうしたケースは、オブジェクトが保存された後に、特定のメールアドレスを使用して Google アカウントを作成する場合にも起こります。User 値の作成時に Google アカウントを表していないメールアドレスがその値に含まれていると、その User 値は実際のユーザーを表す User 値とは一致しません。

開発用 Web サーバーで実行されている場合、すべての User オブジェクトは(シミュレートされた)データストアへの保存時には有効な Google アカウントを表すと想定されます。

有効なユーザーの User オブジェクトにより、そのユーザーの一意の ID 値が得られます。この値はそのユーザーがメールアドレスを変更しても変わりません。この ID(str 値)は user_id() メソッドによって返されます。

User オブジェクトは、アプリでどの認証方式を使用する場合でも同じ形式になります。

データストアでユーザー値を使用する

ユーザー ID は不変であるため、キー名の中や文字列プロパティとして使用できます。そのため、ユーザー値を使用するときは、ユーザー ID(場合によってはユーザーとのメール通信で最後に確認したメールアドレス)を保存します。次の例は、現在のユーザーとユーザー ID を比較する方法を示しています。

class ModelWithUser(ndb.Model):
    user_id = ndb.StringProperty()
    color = ndb.StringProperty()

    @classmethod
    def get_by_user(cls, user):
        return cls.query().filter(cls.user_id == user.user_id()).get()

UserProperty にはメールアドレスとユーザーの一意の ID が含まれているため、これを保存しないことを強くおすすめします。ユーザーがメールアドレスを変更すると、そのユーザーの古いメールアドレス(User に格納されている)と新しい User の値を比較したときに一致しません。代わりに、User のユーザー ID 値をユーザーの不変の一意の ID として使用します。