Oggetti utente

Un'istanza della User classe rappresenta un utente. Le istanze utente sono uniche e confrontabili. Se due istanze sono uguali, rappresentano lo stesso utente.

L'applicazione può accedere all'istanza User per l'utente corrente chiamando la users.get_current_user() funzione.

user = users.get_current_user()

Puoi utilizzare la users.get_current_user() funzione indipendentemente dall'opzione di autenticazione utilizzata dalla tua app.

Un'istanza User può essere creata anche da un indirizzo email:

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

In alternativa, se hai un federated_identity, puoi utilizzarlo per creare un'istanza User:

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

Se il costruttore User viene chiamato con un indirizzo email che non corrisponde a un Account Google valido, l'oggetto verrà creato, ma non corrisponderà a un Account Google reale. Questo accadrà anche se qualcuno crea un Account Google con l'indirizzo email specificato dopo che l'oggetto è stato archiviato. Un valore User con un indirizzo email che non rappresenta un Account Google al momento della creazione non corrisponderà mai a un valore User che rappresenta un utente reale.

Quando viene eseguito sul server web di sviluppo, si presume che tutti gli oggetti User rappresentino Account Google validi quando vengono archiviati nel datastore (simulato).

L'oggetto User per un utente valido può fornire un valore ID utente univoco che rimane lo stesso anche se l'utente modifica il proprio indirizzo email. Il user_id() metodo restituisce questo ID, un str valore.

L'oggetto User ha la stessa forma indipendentemente dal metodo di autenticazione utilizzato dalla tua app.

Utilizzo dei valori utente con Datastore

L'ID utente è stabile, quindi puoi utilizzarlo in un nome chiave o come proprietà stringa. Pertanto, quando utilizzi i valori utente, devi archiviare l'ID utente (e magari l'ultimo indirizzo email visualizzato per comunicare con l'utente via email). L'esempio seguente mostra come confrontare l'utente corrente con un ID utente:

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

Ti consigliamo vivamente di non archiviare una UserProperty, perché include l'indirizzo email insieme all'ID univoco dell'utente. Se un utente modifica il proprio indirizzo email e confronti il vecchio User archiviato con il nuovo valore User, non corrisponderanno. Ti consigliamo invece di utilizzare il valore ID utente User come identificatore univoco stabile dell'utente.