Objek Pengguna

Instance class User mewakili pengguna. Instance User bersifat unik dan sebanding. Jika dua instance setara, berarti keduanya mewakili pengguna yang sama.

Aplikasi dapat mengakses instance User untuk pengguna saat ini dengan memanggil fungsi users.get_current_user().

user = users.get_current_user()

Anda dapat menggunakan fungsi users.get_current_user(), apa pun opsi autentikasi yang digunakan aplikasi Anda.

Instance User juga dapat dibuat dari alamat email:

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

Atau, jika memiliki federated_identity, Anda dapat menggunakannya untuk membuat instance User:

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

Jika konstruktor User dipanggil dengan alamat email yang tidak sesuai dengan Akun Google yang valid, objek masih akan dibuat, tetapi objek itu tidak akan sesuai dengan Akun Google aslinya. Hal ini akan berlaku meskipun seseorang membuat Akun Google dengan alamat email aslinya setelah objek disimpan. Nilai User dengan alamat email yang tidak mewakili Akun Google pada saat dibuat tidak akan pernah cocok dengan nilai User yang mewakili pengguna aslinya.

Saat berjalan di server web pengembangan aplikasi, semua objek User dianggap mewakili Akun Google yang valid saat disimpan di datastore (simulasi).

Objek User untuk pengguna yang valid dapat memberikan nilai ID unik bagi pengguna yang akan tetap sama meskipun pengguna mengubah alamat emailnya. Metode user_id() menampilkan ID ini, yaitu nilai str.

Objek User memiliki format yang sama, apa pun metode autentikasi yang digunakan aplikasi Anda.

Menggunakan Nilai Pengguna dengan Datastore

ID Pengguna bersifat stabil, Anda dapat menggunakannya dalam nama kunci atau sebagai properti string. Oleh karena itu, ketika menggunakan nilai pengguna, Anda perlu menyimpan ID Pengguna (dan mungkin alamat email yang terakhir dilihat untuk berkomunikasi dengan pengguna melalui email). Contoh di bawah ini menunjukkan cara membandingkan pengguna saat ini dengan ID Pengguna:

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()

Sebaiknya Anda tidak menyimpan UserProperty, karena nilai tersebut menyertakan alamat email beserta ID unik pengguna. Jika pengguna mengubah alamat emailnya dan Anda membandingkan nilai User lamanya yang tersimpan dengan nilai User yang baru, nilai tersebut tidak akan cocok. Sebagai gantinya, pertimbangkan untuk menggunakan nilai ID Pengguna User sebagai ID unik stabil pengguna.