Apache で django-socialregistration を使用しています。このエラー メッセージが表示されるようになりました。
Invalid OpenID Namespace u'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0'
それは、Apache 構成ファイルの書き換えルールから始まります。
<VirtualHost *:80>
ServerName foobar.org
ServerAlias foobar.net
RewriteEngine On
RewriteRule ^(.*)$ https://foobar.org$1 [R=301,L]
</VirtualHost>
したがって、foobar.net に着信する、または https を経由しないリクエストは、https://foobar.orgにリダイレクトされます。Apache がこのリダイレクトを行うとき、デフォルトでは URL をエスケープします。http://httpd.apache.org/docs/current/rewrite/flags.html#flag_neを参照してください
したがって、1つの解決策はこれを行うことです:
RewriteRule ^(.*)$ https://foobar.org$1 [R=301,L,NE]
しかし、そもそもなぜリダイレクトが発生するのでしょうか? 私の場合、django-socialregistration が設定をチェックして、OpenID ワークフローで ssl を使用するかどうかを決定するためです。ランサーバーを見て、次のようなものを見ました
GET /openid/redirect/?openid_provider=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid&next=%2Faccounts%2Fnext%2F%3Fnext%3Dundefined
私curl -v <that_url>
は、 Location ヘッダー (つまり、リダイレクト URL) に次のようなものが含まれていることを確認しました。
...openid.return_to=http%3A%2F%2Ffoobar.org%2Fopeni...
https を使用していないことに注意してください。django-socialregistration を調べたところ、settings.py でこれが必要であることがわかりました。
SOCIALREGISTRATION_USE_HTTPS = True