无效的OpenID命名空间u'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0'

时间:2013-02-05 20:49:50

标签: django apache

我在Apache上使用django-socialregistration。我开始收到此错误消息。

Invalid OpenID Namespace u'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0'

1 个答案:

答案 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