English
Skip to page content Skip to main navigation

e.g. "templates" or "datastore"

# User Objects

An instance of the User class represents a user. User instances are unique and comparable. If two instances are equal, then they represent the same user.

The application can access the User instance for the current user by calling the users.get_current_user() function.

    from google.appengine.api import users

    user = users.get_current_user()
    if not user:
      # The user is not signed in.
    else:
      print "Hello, %s!" % user.nickname()

A User instance can be also constructed from an email address.

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

If the User constructor is called with an email address that does not correspond with a valid Google account, the object will be created but it will not correspond with a real Google account. This will be the case even if someone creates a Google account with the given email address after the object is stored. A User value with an email address that does not represent a Google account at the time it is created will never match a User value that represents a real user.

When running under the development web server, all User objects are assumed to represent valid Google accounts when stored in the (simulated) datastore.

The User object for a valid user can provide a unique ID value for the user that stays the same even if the user changes her email address. The `user_id()` method returns this ID, a `str` value.

## Using User Values With the Datastore

User instances can be datastore property values.

    class UserPrefs(db.Model):
      user = db.UserProperty()

    user = users.get_current_user()
    if user:
      q = db.GqlQuery("SELECT * FROM UserPrefs WHERE user = :1", user)
      userprefs = q.get()

Within the datastore, the value is equal to the email address plus the user's unique ID. If the user changes her email address, the new User value will not equal the original User value in datastore queries or when compared by the app. If your app needs a stable identifier that does not change, you can store the unique ID separately from the User value.