2011-10-29 23 views
5

Ho un'applicazione Facebook che utilizza Django. In una delle mie visualizzazioni, utilizzo la seguente parte di codice per rendere l'utente connesso.Django-HttpRedirect non riesce in Internet Explorer

In IE, la riga HttpResponseRedirect restituita non riesce con il messaggio di errore "Questo contenuto non può essere visualizzato in un frame ...", sebbene altri browser funzionino correttamente.

Avete un'idea, perché IE non riesce per HttpResponseRedirect? (Questo è problema viene prodotto su IE9 su Windows 7, il server sta usando django-1,3)

def auto_login(request): 
    username = request.GET['username'] 
    password = request.GET['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
      if user.is_active: 
     login(request, user) 
     theURL='http://apps.facebook.com/myapp/' 
     return HttpResponseRedirect(theURL) 
      else: 
      return HttpResponse("disabled account") 
    else: 
     return HttpResponse("Invalid login") 
+0

di aiuto? Ancora non riuscivo a capire il problema. – user884624

risposta

1

Questo può essere due cose, entrambe relative al modello di sicurezza del browser.

L'opzione 1 è il reindirizzamento a un altro dominio. I clienti possono decidere di seguire il reindirizzamento o di rifiutare. In particolare un reindirizzamento HTTP 307 (che consente l'inoltro di dati POST) non è sempre accettato dai clienti.

L'opzione 2 è correlata al reindirizzamento di una risorsa con metodo HTTP POST url a un'altra risorsa con metodo GET.

Se il metodo HTTP della vista corrente e il reindirizzamento sono diversi (ad esempio HTTP POST contro l'url/login vs HTTP GET di facebook/myapp), almeno IE8 rifiuterà di reindirizzare. Non sono sicuro che sia stato cambiato in IE9.

Ci sono alcune cose che potresti provare.

  • Si potrebbe provare un altro codice di risposta HTTP. Supponendo che non sia necessario inoltrare i parametri HTTP dalla richiesta originale alla richiesta reindirizzata, un codice di risposta 303 sarebbe migliore di un 307.
  • Se la situazione implica un reindirizzamento di una risorsa POST HTTP alla risorsa HTTP GET esterna su facebook, un altro tentativo è di mettere un reindirizzamento in più nel mezzo: risorsa POST su yoursite.com -> reindirizzare a GET risorsa su yoursite.com -> reindirizzamento esterno al dominio di Facebook.
  • L'opzione "reindirizzamento extra" può risolvere un browser ma interromperne un altro (i browser hanno limiti sui reindirizzamenti, che possono variare a seconda del tipo e della versione del browser). Se si dovesse entrare in questa situazione, potrebbe essere necessario rilevare l'agente utente e passare da IE ad altri browser.

Alcuni buoni collegamenti:

Django/IE8 Admin Interface Weirdness

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes