フロントエンドがAngularJSAPIであり、Django RestFrameworkで開発されたバックエンドAPIにリクエストを送信するアプリケーションを開発しています。
The frontend is on the domain: https://front.bluemix.net
And my backend is on the domain: https://back.bluemix.net
フロントエンドAPIからバックエンドAPIへのリクエストに問題があります。エラーはこれです:
Error: CSRF Failed: Referer checking failed - https://front.bluemix.net does not match any trusted origins.
私はCORSを使用しており、DjangoバックエンドAPIのsettings.pyに次の行をすでに含めています:
ALLOWED_HOSTS = []
CORS_ALLOW_CREDENTIALS = True
CORS_Origin_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CSRF_TRUSTED_ORIGINS = ['https://front.bluemix.net/']
CORS_REPLACE_HTTPS_REFERER = True
CSRF_COOKIE_DOMAIN = 'bluemix.net'
CORS_Origin_WHITELIST = (
'https://front.bluemix.net/',
'front.bluemix.net',
'bluemix.net',
)
誰もがこの問題を解決する方法を知っていますか?
CSRF_TRUSTED_ORIGINS
の設定が間違っています-次のように変更してください:
CSRF_TRUSTED_ORIGINS = ['front.bluemix.net']
設定には、スキームではなく、 ホスト名のみ が必要です。設定はHTTPS経由で接続する場合にのみ効果があるため、スキームはとにかく冗長です。
おそらくALLOWED_HOSTS
..にも何かを入れる必要があります。
これに従う人は、CORS_Origin_ALLOW_ALL
をTrue
に設定している場合、すべてのホストをすでに許可しているため、CORS_Origin_WHITELIST
変数を設定する必要はありません。
私の問題の解決策-誰かを助けるかもしれません
私たちが抱えていた問題は独特なものでした。クライアントアプリケーションがTokenAuthenticationを使用してリクエストを別のアプリケーションに送信し、CRMがDjango Adminとしたがって、SessionAuthenticationを使用します。Django管理アプリケーションを開くと、SessionMiddlewareが自動的に作成されていました。そのドメインのsession_idCookie。クライアントアプリケーションを開いてリクエストを実行しようとすると、次のエラーが発生しました。
Error: CSRF Failed: Referer checking failed - https://domainofthedjangoadminapp.com does not match any trusted origins.
これは、session_idCookieが既にブラウザに設定されているため、SessionAuthenticationではなくSessionAuthenticationを使用してリクエストが行われたためです。 /// =)TokenAuthentication(---)そして失敗します。
クッキーを削除することで明らかに問題が解決しました。