Objetos de usuario

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

La aplicación puede acceder a la instancia User del usuario actual llamando a la función users.get_current_user().

user = users.get_current_user()

Puedes usar la función users.get_current_user() independientemente de la opción de autenticación que use tu aplicación.

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

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

Si tienes un federated_identity, puedes usarlo para crear una instancia de User:

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

Si se llama al constructor User con una dirección de correo que no corresponde a una cuenta de Google válida, se creará el objeto, pero no corresponderá a una cuenta de Google real. Esto ocurrirá aunque alguien cree una cuenta de Google con la dirección de correo proporcionada después de que se almacene el objeto. Un valor de User con una dirección de correo que no represente una cuenta de Google en el momento de su creación nunca coincidirá con un valor de User que represente a un usuario real.

Cuando se ejecuta en el servidor web de desarrollo, se presupone que todos los objetos User representan cuentas de Google válidas cuando se almacenan en el almacén de datos (simulado).

El objeto User de un usuario válido puede proporcionar un valor de ID único para el usuario que no cambia aunque este cambie su dirección de correo electrónico. El método user_id() devuelve este ID, un valor str.

El objeto User tiene el mismo formato, independientemente del método de autenticación que utilice tu aplicación.

Uso de valores User con el almacén de datos

El ID de usuario es estable, por lo que puedes usarlo en un nombre de clave o como propiedad de cadena. Por lo tanto, cuando utilices valores de usuario, te recomendamos que almacenes el ID de usuario (y quizás la última dirección de correo para comunicarte con el usuario por correo). En el ejemplo siguiente se muestra cómo comparar el usuario actual con un ID de 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()

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