2011-10-29 40 views
5

我有一個使用Django的Facebook應用程序。在我的一個觀點中,我使用下面的一段代碼來讓用戶登錄。Django-HttpRedirect在Internet Explorer中失敗

在IE中,返回HttpResponseRedirect行失敗,並顯示錯誤消息「此內容無法在框架中顯示...」,儘管其他瀏覽器正常工作。

你有一個想法,爲什麼IE瀏覽器對HttpResponseRedirect失敗? (這問題上產生IE9在Windows 7上,服務器使用的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

任何幫助嗎?我仍然無法弄清楚問題所在。 – user884624

回答

1

這可能是兩件事情,既關係到瀏覽器的安全模型。

選項1是重定向到另一個域。 客戶可能決定遵循重定向,或拒絕。特別是HTTP 307重定向(允許轉發POST數據)並不總是被客戶接受。

選項2與使用方法GET將HTTP方法POST URL重定向到另一個資源相關。

如果當前視圖和重定向的HTTP方法不同(即針對/ login url與facebook/myapp的HTTP GET的HTTP POST),至少IE8將拒絕重定向。我不確定這在IE9中已經發生了變化。

有幾件事你可以嘗試。

  • 您可以嘗試其他HTTP響應代碼。假設不需要將HTTP參數從原始請求轉發到重定向請求,則響應代碼303將優於307.
  • 如果您的情況涉及將HTTP POST資源重定向到外部HTTP GET資源在facebook上,另一個嘗試在中間放置了一個額外的重定向: yoursite.com上的POST資源 - >在yoursite.com上重定向到GET資源 - >外部重定向到facebook域。
  • 「額外重定向」選項可以修復一個瀏覽器,但打破另一個瀏覽器(瀏覽器對重定向有限制,每個瀏覽器類型和版本可能不同)。如果您遇到這種情況,您可能需要檢測用戶代理並在IE和其他瀏覽器之間切換。

幾個不錯的鏈接:

Django/IE8 Admin Interface Weirdness

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

相關問題