0

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

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

1 回答 1

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。我看了我的运行服务器,看到了类似的东西

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
于 2013-02-05T20:49:50.017 回答