Objets User

Une instance de la classe User représente un utilisateur. Ces instances sont uniques et comparables. Si deux instances sont égales, elles représentent le même utilisateur.

L'application peut accéder à l'instance "User" pour l'utilisateur actuel en appelant la fonction users.get_current_user().

user = users.get_current_user()

Vous pouvez utiliser la fonction users.get_current_user() quelle que soit l'option d'authentification employée par votre application.

Une instance User peut également être créée à partir d'une adresse e-mail :

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

De même, si vous disposez d'une identité fédérée (federated_identity), vous pouvez l'utiliser pour créer une instance User :

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

Si le constructeur User est appelé avec une adresse e-mail ne correspondant pas à un compte Google valide, l'objet est créé mais ne correspond pas à un véritable compte Google. Ceci se produit même si un utilisateur crée un compte Google avec l'adresse e-mail fournie après le stockage de l'objet. Une valeur User associée à une adresse e-mail ne représentant pas un compte Google au moment de sa création ne correspondra jamais à une valeur User représentant un véritable utilisateur.

Lorsqu'ils sont exécutés sous le serveur Web de développement, tous les objets User sont supposés représenter des comptes Google valides lors de leur stockage dans le datastore (simulé).

L'objet User d'un utilisateur valide peut fournir une valeur d'identifiant unique à l'utilisateur, qui ne change pas même si l'adresse e-mail change. La méthode user_id() renvoie cet identifiant, qui est une chaîne (str).

Quelle que soit la méthode d'authentification utilisée par votre application, l'objet User présente toujours le même format.

Utiliser des valeurs User avec le datastore

L'ID d'utilisateur est stable et vous pouvez l'utiliser dans un nom de clé ou en tant que propriété de chaîne. Par conséquent, lorsque vous employez des valeurs utilisateur, vous devez stocker l'ID d'utilisateur (et peut-être la dernière adresse e-mail connue pour pouvoir communiquer avec lui par courrier électronique). L'exemple ci-dessous montre comment comparer l'utilisateur actuel à un ID d'utilisateur :

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

Nous vous recommandons vivement de ne pas stocker de propriété UserProperty, car elle contient l'adresse e-mail et l'ID unique de l'utilisateur. Si un utilisateur change d'adresse e-mail et que vous comparez l'ancienne valeur User stockée à la nouvelle valeur User, elles ne correspondront pas. Envisagez plutôt d'utiliser la valeur d'ID utilisateur User comme identifiant unique stable de l'utilisateur.