使用者物件

User 類別的執行個體代表的是使用者。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 值配對。

在開發網路伺服器下執行應用程式時,系統會假設所有 User 物件在 (模擬) 資料儲存庫中儲存時,這些物件皆代表有效的 Google 帳戶。

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

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

將 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。