2011-10-29 13 views
5

Djangoを使用したFacebookアプリケーションがあります。私の意見の1つでは、ユーザをログインさせるために次のコードを使用します。インターネットエクスプローラでDjango-HttpRedirectが失敗する

IEでは、HttpResponseRedirect行が失敗し、「このコンテンツはフレームに表示できません...」というエラーメッセージが表示されますが、他のブラウザは正常に動作しています。

IEがHttpResponseRedirectに失敗する理由を知っていますか? これは二つのこと、ブラウザのセキュリティモデルに関連する両方にすることができ

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

を(これは、問題は、Windows 7上のIE9で生産され、サーバはジャンゴ-1.3を使用しています)。

オプション1は、別のドメインへのリダイレクトです。 クライアントは、リダイレクトに従うか、拒否するかを決めることができます。特に、HTTP 307リダイレクト(POSTデータの転送を許可する)がクライアントによって常に受け入れられるわけではありません。

オプション2は、HTTPメソッドPOST URLを持つリソースのリダイレクトに関連し、メソッドGETを使用して別のリソースにリダイレクトされます。

現在のビューとリダイレクトのHTTPメソッドが異なる場合(つまり、facebook/myappの/ login URLとHTTP GETの間のHTTP POST)、少なくともIE8はリダイレクトを拒否します。私はこれがIE9で変更されたのか分からない。

お試しいただけることがいくつかあります。

  • 別のHTTP応答コードを試すことができます。元の要求からリダイレクトされた要求にHTTPパラメータを転送する必要がないと仮定すると、応答コード303は307より優れています。
  • HTTP POSTリソースを外部HTTP GETリソースにリダイレクトする場合あなたのサイトのPOSTリソース - >あなたのサイトのGETリソースにリダイレクト - >外部のFacebookドメインにリダイレクトする。
  • "余分なリダイレクト"オプションは、1つのブラウザを修正する可能性がありますが、別のものを壊す可能性があります(ブラウザにはリダイレクトに制限があります。ブラウザの種類とバージョンによって異なります)。このような状況に陥る場合は、ユーザーエージェントを検出して、IEと他のブラウザとの間で切り替える必要があります。

いくつかの良いリンク:

Django/IE8 Admin Interface Weirdness

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