pregunta originalCómo utilizar WSGI para redireccionar un usuario de http a https
App Engine SDK 1.6.5
Python 2.7
webapp2
he implementado esquemas para asegurar webapp2 páginas a https. El problema es que cuando un usuario va a decir http: // site/login en lugar de https: // site/login obtiene un error 404 debido a que los esquemas no reconocen la ruta.
ejemplo main.py
# Libraries
import webapp2
# Local Controllers
from controllers.HomeHandler import HomeHandler
from controllers.LoginHandler import LoginHandler
app = webapp2.WSGIApplication([
webapp2.Route(r'/', HomeHandler),
webapp2.Route(r'/login', LoginHandler, schemes=['https'], name='login')
], debug=True)
He añadido otra ruta/controlador por debajo de la ruta https para coger http solicitudes:
webapp2.Route(r'/login', RouteLogin)
RouteLogin.py
# Libraries
import webapp2
class RouteLogin(webapp2.RequestHandler):
def get(self):
self.redirect('https://site.appspot.com/login')
Este obras , pero parece que debería haber una mejor manera de hacer esto. Como usar htaccess en el servidor web Apache. Esto es demasiado como un truco para mi gusto. Realmente no me gustan las URL codificadas en mi código. Sin mencionar que son 2 solicitudes que para iniciar sesión no es un gran problema, pero podría haber otros ejemplos en los que termina costando demasiado.
NOTA 1: Si está mirando esta solución, tenga en cuenta que el uso de los esquemas HTTPS también significa que no podrá usar la consola de desarrollo sin borrar el esquema o configurar una variable que configure para el desarrollo.
NOTA 2: Pude obtener una forma programática de servir HTTPS en lugar de HTTP. Estaba en el camino correcto con el comentario a continuación, pero necesita una discusión.
webapp2.uri_for('login', _scheme='https')
Esto le dará la correcta https://someapp.appspot.com/login url. Desafortunadamente no soluciona mi problema principal de cómo manejar a las personas escribiendo la URL en la barra de direcciones sin https y recibiendo un error a menos que use el hack anterior. Así que sigo buscando la forma de WSGI para enrutar las solicitudes de ingresos a HTPPS.
ediciones: Añadido Nota 1 y aclaró el título, pensé que era evidente que yo estaba usando WSGI de la fuente y no CGI.
Si bien este es un problema lateral al usar 'webapp2.uri_for ('login')' tampoco genera https como la URL. Por lo tanto, me deja tratando de abordar el problema completo aún. Si el usuario no inicia los plugins de https App Engine en HTTP y los errores en/login, ya que sigue siendo http a menos que codifique el enlace o use mi hack más arriba. –
¿Qué tal hacer una sustitución de cadena para reemplazar http por https? No es la mejor solución, pero al menos no es necesario codificar la URL completa – Dhara
Responda la pregunta como respuesta, ya sea que la acepte o no (puede aceptar su propia respuesta, especialmente en lugar de una respuesta incorrecta, como sugiere uno de sus comentarios a continuación). – Bruno