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 en Github . 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: https://stackoverflow.com/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'https://stackoverflow.com/login', LoginHandler, schemes=['https']), webapp2.Route(r'https://stackoverflow.com/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

   

Who is logged in: {{loggedin}}

  • {% ifequal loggedin "Anonymous" %} Login {% else %} Logout {% endifequal %}
  • {% ifequal loggedin "Admin" %}
  • Admin
  • {% endifequal %}

login.html

      

admin.html

   

Your logged in as: {{user}}

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.

¿Has comprobado con FireCookie (o similar) los detalles de la cocinera? El camino, el dominio y así sucesivamente? ¿Está utilizando un nombre de dominio diferente para asegurado? como secure.app.com para https y http://www.app.com para http?

Nunca probé https en GAE, me pregunto tratando de ayudar, lo siento si estoy diciendo cosas obvias.