我在Apache上使用django-socialregistration。我开始收到此错误消息。
Invalid OpenID Namespace u'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0'
答案 0 :(得分: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
所以一个解决方案就是这样做:
RewriteRule ^(.*)$ https://foobar.org$1 [R=301,L,NE]
但为什么重定向首先发生?在我的情况下,这是因为django-socialregistration检查设置以确定是否在OpenID工作流中使用ssl。我看了我的runserver,看到了像
这样的东西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标头(即重定向网址)包含这样的内容:
...openid.return_to=http%3A%2F%2Ffoobar.org%2Fopeni...
请注意,它没有使用https。我挖掘了django-socialregistration,发现我需要在settings.py中使用它:
SOCIALREGISTRATION_USE_HTTPS = True