Nutzerobjekte

Eine Instanz der Klasse User repräsentiert einen Nutzer. User-Instanzen sind eindeutig und vergleichbar. Wenn zwei Instanzen gleich sind, stehen sie für denselben Nutzer.

Die Anwendung kann auf die User-Instanz für den aktuellen Nutzer durch Aufrufen der Funktion users.get_current_user() zugreifen.

user = users.get_current_user()

Sie können die Funktion users.get_current_user() unabhängig davon verwenden, welche Authentifizierungsoption von der Anwendung verwendet wird.

User-Instanzen können auch aus E-Mail-Adressen erstellt werden:

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

Wenn Sie eine federated_identity haben, können Sie auch damit eine User-Instanz erstellen:

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

Wenn der User-Konstruktor mit einer E-Mail-Adresse aufgerufen wird, die nicht einem gültigen Google-Konto entspricht, wird das Objekt zwar erstellt, entspricht jedoch keinem tatsächlichen Google-Konto. Das ist selbst dann der Fall, wenn jemand nach dem Speichern des Objekts ein Google-Konto mit der entsprechenden E-Mail-Adresse erstellt. Ein Nutzerwert mit einer E-Mail-Adresse, die zur Zeit der Erstellung kein Google-Konto repräsentiert, wird niemals einem Nutzerwert entsprechen, der einen tatsächlichen Nutzer repräsentiert.

Bei Ausführung auf dem Entwicklungs-Webserver wird davon ausgegangen, dass alle User-Objekte gültige Google-Konten repräsentieren, wenn sie im (simulierten) Datenspeicher gespeichert werden.

Das User-Objekt für einen gültigen Nutzer kann einen eindeutigen ID-Wert für den Nutzer bereitstellen, der selbst dann gleich bleibt, wenn der Nutzer seine E-Mail-Adresse ändert. Die Methode user_id() gibt diese ID, einen str-Wert, zurück.

Das User-Objekt weist unabhängig von der von der App verwendeten Authentifizierungsmethode immer dasselbe Format auf.

Nutzerwerte mit Datenspeicher verwenden

Die Nutzer-ID ist stabil. Sie können sie in einem Schlüsselnamen oder als eine String-Property verwenden. Wenn Sie Nutzerwerte verwenden, sollten Sie daher die Nutzer-ID (und möglicherweise die zuletzt erfasste E-Mail-Adresse für die Kommunikation mit dem Nutzer per E-Mail) speichern. Das folgende Beispiel zeigt, wie der aktuelle Nutzer mit einer Nutzer-ID verglichen wird:

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

Es wird dringend empfohlen, keine UserProperty zu speichern, da diese die E-Mail-Adresse sowie die eindeutige ID des Nutzers enthält. Wenn ein Nutzer seine E-Mail-Adresse ändert und Sie den alten gespeicherten Wert User mit dem neuen Wert User vergleichen, stimmen diese nicht überein. Stattdessen sollten Sie den Nutzer-ID-Wert von User als stabile eindeutige Kennung des Nutzers verwenden.