Objetos do utilizador

Uma instância da classe User representa um utilizador. As instâncias de utilizadores são únicas e comparáveis. Se duas instâncias forem iguais, representam o mesmo utilizador.

A aplicação pode aceder à instância User do utilizador atual chamando a função users.get_current_user().

user = users.get_current_user()

Pode usar a função users.get_current_user() independentemente da opção de autenticação que a sua app usa.

Também é possível construir uma instância de utilizador a partir de um endereço de email:

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

Em alternativa, se tiver um federated_identity, pode usá-lo para criar uma instância de utilizador:

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

Se o construtor User for chamado com um endereço de email que não corresponda a uma Conta Google válida, o objeto é criado, mas não corresponde a uma Conta Google real. Isto aplica-se mesmo que alguém crie uma Conta Google com o endereço de email fornecido depois de o objeto ser armazenado. Um valor de utilizador com um endereço de email que não represente uma Conta Google no momento da criação nunca vai corresponder a um valor de utilizador que represente um utilizador real.

Quando executados no servidor Web de desenvolvimento, todos os objetos User são considerados representações de Contas Google válidas quando armazenados no arquivo de dados (simulado).

O objeto User de um utilizador válido pode fornecer um valor de ID exclusivo para o utilizador que permanece igual, mesmo que o utilizador altere o respetivo endereço de email. O método user_id() devolve este ID, um valor str.

O objeto User tem o mesmo formato, independentemente do método de autenticação que a sua app usa.

Usar valores de utilizadores com o Datastore

O ID do utilizador é estável. Pode usá-lo num nome de chave ou como uma propriedade de string. Por conseguinte, quando usar valores de utilizador, é recomendável armazenar o ID do utilizador (e, talvez, o endereço de email visto pela última vez para comunicar com o utilizador por email). O exemplo abaixo mostra como comparar o utilizador atual com um ID do utilizador:

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

Recomendamos vivamente que não armazene um UserProperty, uma vez que inclui o endereço de email, juntamente com o ID exclusivo do utilizador. Se um utilizador alterar o respetivo endereço de email e comparar o valor User antigo armazenado com o novo valor User, não vai haver correspondência. Em alternativa, considere usar o User valor de User ID como o identificador exclusivo estável do utilizador.