Python 2 ya no es compatible con la comunidad. Recomendamos que migres las apps de Python 2 a Python 3.

Objetos de usuario

Una instancia de clase User representa a un usuario. Las instancias de usuarios son únicas y comparables. Si dos instancias son iguales, representan al mismo usuario.

La aplicación puede acceder a la instancia de usuario para el usuario actual si llama a la función users.get_current_user().

user = users.get_current_user()

Puedes usar la función users.get_current_user() con cualquiera de las opciones de autenticación que use tu aplicación.

Una instancia de usuario también se puede construir a partir de una dirección de correo electrónico:

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

O bien, si tienes una federated_identity, puedes usarla para crear una instancia de usuario:

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

Si se llama al constructor de usuarios con una dirección de correo electrónico que no corresponde a una Cuenta de Google válida, el objeto se creará, pero no corresponderá a una Cuenta de Google verdadera. Esto sucederá incluso si alguien crea una Cuenta de Google con esa dirección de correo electrónico luego de que se almacenó el objeto. Un valor de usuario con una dirección de correo electrónico que no representa una Cuenta de Google en el momento que se crea, nunca coincidirá con un valor de usuario que represente al usuario verdadero.

Cuando se ejecutan en el servidor web de desarrollador, se supone que todos los objetos de usuario representan Cuentas de Google válidas cuando se almacenan en el almacén de datos (simulado).

El objeto de usuario para un usuario válido puede proporcionar un valor de ID único, el cual se mantiene igual, incluso si el usuario cambia su dirección de correo electrónico. El método user_id() muestra este ID, que es un valor str.

El objeto de usuario tiene el mismo formato sin importar el método de autenticación que use tu app.

Cómo usar valores de usuario con el almacén de datos

Si el ID del usuario es estable, puedes usarlo en un nombre clave o como propiedad de una string. Por lo tanto, cuando uses valores de usuario, querrás almacenar el ID del usuario (y quizás la última dirección de correo electrónico vista para comunicarte con el usuario por correo). En el siguiente ejemplo, se muestra cómo comparar el usuario actual con el ID del usuario:

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

Te recomendamos no almacenar una UserProperty, ya que incluye la dirección de correo electrónico y el ID único del usuario. Si un usuario cambia su dirección de correo electrónico y la comparas su User anterior almacenado con el valor de User nuevo, no coincidirán. En su lugar, considera usar el valor de ID del usuario User como el identificador único estable del usuario.