Quick start with Users Python API, App Engine Authentication
Introduction#
Using the Users API is a very simple and flexible way to work the authentication in App Engine, but please make sure that your application cases don’t require more elements for the authentication environment.
Note: If you need more information about the traditional structure of an App Engine app, please review this info.
Remarks#
The Users API allows:
- Detect whether the current user has signed in.
- Redirect the user to the appropriate sign-in page to sign in.
- Request that your application user create a new Google account if they don’t have one already.
Important elements into the view:
Import:
from google.appengine.api import usersUser-object and methods:
user = users.get_current_user()Note: the implementation of jinja2 is optional, but into the article is used to explaining the completely workflow.
MainPage Handler [views.py]
General Imports, using jinja2 to populate templates into htmls.
import jinja2
import webapp2Important import to use Users API:
from google.appengine.api import usersSetting of Jinja environment: [into the example the tehcnology selected to populate the information into the frontend]
JINJA_ENVIRONMENT = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
extensions=['jinja2.ext.autoescape'],
autoescape=True)Concrete Handler:
class MainPage(webapp2.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
url = users.create_logout_url(self.request.uri)You can include more logic here for users
else:
url = users.create_login_url(self.request.uri)Templates to pass information using jinja2. For this example, the user object and the url string.
template_values = {
'user': user,
'url': url,
}
JINJA_ENVIRONMENT.add_extension('jinja2.ext.do')Using index.html example. [traditional html page]
template = JINJA_ENVIRONMENT.get_template('index.html')
self.response.write(template.render(template_values))App Routing [urls.py]
I used for this example webapp2 to cover the routing.
from webapp2_extras.routes import RedirectRoute as RouteImport from views:
from views import MainPageMainPage is the handler set into root ”/“:
urlpatterns = [
Route('/', MainPage),
]Html, frontend example of how use Users API [index.html]
Simple extract of index.html:
<div class="sign-in">
{% if user %}[Passing the url we have the opportunity to logout the user]
<a href="{{ url|safe }}">LOG OUT</a>[You can include here operations for user authenticated]
{% else %}[Passing the url we have the opportunity to login the user]
<a href="{{ url|safe }}">SIGN IN</a>
{% endif %}
</div>This is a simple example of how the operation is used on the index.html page.