Objetos User

Uma instância da classe User representa um usuário. As instâncias de usuário são exclusivas e comparáveis. Se forem iguais, duas instâncias representarão o mesmo usuário.

O aplicativo pode acessar a instância de User do usuário atual chamando a função users.get_current_user().

user = users.get_current_user()

Use a função users.get_current_user(), independentemente da opção de autenticação usada pelo app.

Uma instância de User também pode ser criada com base em um endereço de e-mail:

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

Ou, se você tiver um federated_identity, poderá usá-lo para criar uma instância User:

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

Se o construtor User for chamado com um endereço de e-mail que não corresponde a uma conta do Google válida, o objeto será criado, mas não corresponderá a uma conta do Google real. Esse será o caso mesmo se alguém criar uma conta do Google com o determinado endereço de e-mail depois que o objeto for armazenado. Um valor User com um endereço de e-mail que não representa uma Conta do Google no momento em que for criado jamais corresponderá a um valor User que representa um usuário real.

Durante a execução no servidor da Web de desenvolvimento, presume-se que todos os objetos User representem Contas do Google válidas no armazenamento de dados (simulado).

O objeto User para um usuário válido pode fornecer um valor de código exclusivo para o usuário que continua sendo o mesmo caso ele altere o endereço de e-mail. O método user_id() retorna esse ID, um valor str.

O objeto User tem a mesma forma, independentemente do método de autenticação usado pelo app.

Como usar valores de User com o Datastore

O código do usuário é estável. Você pode usá-lo em um nome de chave ou como uma propriedade de string. Por isso, ao usar valores de usuário, armazene o código do usuário (e talvez o endereço de e-mail visto pela última vez para se comunicar com o usuário por e-mail). Veja no exemplo abaixo como comparar o usuário atual com um código do usuário:

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 que você não armazene um UserProperty, porque ele inclui o endereço de e-mail junto com o ID exclusivo do usuário. Se um usuário alterar o endereço de e-mail e você comparar o User antigo armazenado com o novo valor de User, eles não serão correspondentes. Em vez disso, avalie a possibilidade de usar o valor do ID do usuário de User como o identificador exclusivo estável do usuário.