使用者物件

User 類別的執行個體代表使用者。使用者執行個體是獨一無二且可比較的。如果兩個例項相等,則代表同一位使用者。

應用程式可以呼叫 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 值相符。

在開發網頁伺服器下執行時,儲存在 (模擬) Datastore 中的所有 User 物件都會假設代表有效的 Google 帳戶。

有效使用者的 User 物件可以為使用者提供專屬的識別碼值,即便使用者變更電子郵件地址,識別碼仍會維持不變。 user_id() 方法會傳回這個 ID,也就是 str 值。

無論應用程式採用何種驗證方式,User 物件的格式均會相同。

將使用者值與 Datastore 搭配使用

使用者 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。