App Engine Howto mantiene el inicio de sesión en http y https con el servicio de Usuarios

El siguiente código demuestra el problema que tengo, está disponible enGithub. Cuando elimino la ruta segura para iniciar sesión, el código funciona, pero cuando aseguro la página, no lo hace. O si hago la página de inicio segura: siempre / opcional. Este código no funcionará en su servidor de desarrollo a menos que cambie el esquema http en main.py de https a http.

¿Por qué este código no funciona con los inicios de sesión que pasan por https?

app.yaml

application: testapp
version: 1
runtime: python27
api_version: 1
threadsafe: yes

libraries:
- name: webapp2
  version: latest

handlers:
- url: /login
  script: main.app
  secure: always

- url: /.*
  script: main.app
  secure: never

main.py

import webapp2
from google.appengine.ext.webapp import template
from google.appengine.api import users
from login import LoginHandler
from admin import AdminHandler

class HomeHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()
        if users.is_current_user_admin():
            loggedin = "Admin"
            values = {'loggedin': loggedin,
                      'logout_url': users.create_logout_url("/")}
        elif user:
            loggedin = "User"
            values = {'loggedin': loggedin,
                      'logout_url': users.create_logout_url("/")}
        else:
            loggedin = "Anonymous"
            values = {'loggedin': loggedin,
                      'logout_url': users.create_logout_url("/")}
        self.response.out.write(template.render('home.html', values))

app = webapp2.WSGIApplication([
    webapp2.Route(r'/', HomeHandler),
    webapp2.Route(r'/login', LoginHandler, schemes=['https']),
    webapp2.Route(r'/admin', AdminHandler, schemes=['https'])
], debug=True)

login.py

import webapp2
from google.appengine.ext.webapp import template
from google.appengine.api import users

#  Login page Request Handler Class
class LoginHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()

        values = {'login_url': users.create_login_url("/")}
        self.response.out.write(template.render('login.html', values))

admin.py

import webapp2
from google.appengine.ext.webapp import template
from google.appengine.api import users

#  Login page Request Handler Class
class AdminHandler(webapp2.RequestHandler):
    def get(self):
        user = users.get_current_user()

        values = {'user': users.nickname()}
        self.response.out.write(template.render('admin.html', values))

home.html

<html>
<body>
<p>Who is logged in: {{loggedin}}</p>
<ul>
  <li>
    {% ifequal loggedin "Anonymous" %}
      <a href="/login">Login</a>
    {% else %} <!-- user is logged in -->
      <a href="{{logout_url}}">Logout</a>
    {% endifequal %}
  </li>
  {% ifequal loggedin "Admin" %}
    <li class="right">
      <a href="/admin">Admin</a>
    </li>
  {% endifequal %}
</ul>
</body>
</html>

login.html

<html>
<body>
<ul>
  <li>
      <a href="{{login_url}}">Login</a>
  </li>
</ul>
</body>
</html>

admin.html

<html>
<body>
      <p>Your logged in as: {{user}}</p>
</body>
</html>

Como puede ver un ejemplo muy simple, el usuario hace clic en el enlace de inicio de sesión, va a la página de inicio de sesión donde inicia sesión con Autenticación de Google y se redirige a la página de inicio no segura. Cuando el usuario vuelve a la página de inicio, el comportamiento esperado es que "Quién está conectado" devuelve un administrador / usuario / anónimo, pero todo lo que recibo es anónimo, no se agregó la URL de cierre de sesión o la URL de administrador para un usuario administrador. Si hago que el inicio de sesión sea http normal, entonces si tengo una ruta segura para decir / admin que la solicitud recibe un error 401.

Este código solo funciona cuando hago que todo sea HTTPS. Sé que otros utilizan páginas de inicio de sesión seguras y aún pueden acceder a la información del usuario en páginas no seguras. Creo que esto tiene que ver con cómo se configura la cookie, pero no entiendo lo que estoy haciendo mal.

Respuestas a la pregunta(1)

Su respuesta a la pregunta