domanda inizialeCome utilizzare WSGI per reindirizzare un utente da HTTP a HTTPS
App SDK 1.6.5 Engine
Python 2.7
webapp2
ho implementato schemi webapp2 per garantire pagine a https. Il problema è che quando un utente va a dire http: // site/login invece di https: // site/login ottengono un errore 404 a causa degli schemi che non riconoscono il percorso.
esempio 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)
Ho aggiunto un altro itinerario/regolatore al di sotto del percorso https per la cattura http richieste:
webapp2.Route(r'/login', RouteLogin)
RouteLogin.py
# Libraries
import webapp2
class RouteLogin(webapp2.RequestHandler):
def get(self):
self.redirect('https://site.appspot.com/login')
questo funziona , ma sembra che ci dovrebbe essere un modo migliore per farlo. Come usare htaccess sul server web Apache. Questo è troppo simile a un trucco per i miei gusti. Non mi piacciono davvero gli URL codificati nel mio codice. Per non parlare del fatto che sono 2 richieste che per il login non sono un grosso problema, ma potrebbero esserci altri esempi in cui finisce per costare troppo.
NOTA 1: Se si sta osservando questa soluzione, tenere presente che l'utilizzo degli schemi HTTPS significa anche che non sarà possibile utilizzare la console di sviluppo senza eliminare lo SCHEME o configurare una variabile impostata per dev.
NOTA 2: Sono riuscito a ottenere un modo programmatico per servire HTTPS anziché HTTP. Ero sulla strada giusta con il commento qui sotto, ma ha bisogno di una discussione.
webapp2.uri_for('login', _scheme='https')
Questo ti darà l'URL corretto https://someapp.appspot.com/login. Sfortunatamente non si occupa del mio problema principale su come gestire le persone che digitano l'url nella barra degli indirizzi senza https e ricevendo un errore a meno che non utilizzi l'hack sopra. Quindi sto ancora cercando il modo WSGI per indirizzare le richieste di reddito a HTPPS.
Modifiche: Aggiunta la Nota 1 e chiarito il titolo, ho pensato che fosse evidente che stavo usando WSGI dal sorgente e non da CGI.
Mentre questo è un problema collaterale che utilizza 'webapp2.uri_for ('login')' non genera https come l'URL. Quindi mi lascia cercando di affrontare ancora il problema completo. Se l'utente non avvia i plug-in del motore app https lungo in HTTP e gli errori su/login poiché è ancora http, a meno che non venga codificato il link o non si utilizzi il mio hack in alto. –
Come si fa una sostituzione di stringa per sostituire http con https? Non è la soluzione migliore, ma almeno in questo modo non è necessario codificare l'intero URL – Dhara
Si prega di inviare la risposta alla tua domanda come risposta, che tu accetti o meno (puoi accettare la tua risposta, in particolare invece di una risposta sbagliata, come suggerisce uno dei tuoi commenti qui sotto). – Bruno