8

我一直在努力让 django-social-auth 正常工作。我的开发服务器是我工作中专用网络中的服务器,通过 10.0.0.* IP 地址访问。我们在这台服务器上运行了多个 django 应用程序。这是我对此应用程序的配置:

# Perceptual
location /perceptual/static/ {
        alias /opt/perceptual/perceptual/static/;
}
location /perceptual/ {
        proxy_pass http://127.0.0.1:8001;
}

我正在用这个从我的静态目录中运行一个backbone.js 应用程序。所以,我可以去 10.0.0.54/perceptual/static/,获取我的主干应用程序。

现在,我的设置文件中有我的 Facebook APP_ID 和 FACEBOOK_API_SECRET,都已正确配置。我在我的实际机器(不是开发服务器)上的 /etc/hosts 文件中也有一行将myapp.com指向10.0.0.54,我的 Facebook 应用程序配置为 App Domains 和 Site URL 如下所示:

App Domains: perceptual.com
Site URL: http://perceptual.com

问题是,每当我去 perceptual.com/perceptual/static/login/facebook/ 时,它都会给我这个错误: Facebook 错误 (django-social-auth)

这是我收到该错误时的 URL: https ://www.facebook.com/dialog/oauth?scope=email&state=PC0OhXnEuaW2wcUuINO0rMSMAtVDuMbn&redirect_uri=http%3A%2F%2F127.0.0.1%3A8001%2Fperceptual%2Fcomplete% 2Ffacebook%2F%3Fredirect_state%3DPC0OhXnEuaW2wcUuINO0rMSMAtVDuMbn&client_id=419178148154217

所以你可以从 URL 中看到我的 redirect_uri 是http://localhost:8001- 但我不希望它是那样的,很明显。一旦我将其更改为 perceptual.com,它就会变得更远:然后我收到此错误:

AuthFailed at /perceptual/complete/facebook/
Authentication failed: There was an error authenticating the app

这是我的回溯,如果有帮助

在这一点上,我被卡住了 - 如何让我的服务器将 redirect_uri 更改为 Facebook 可以处理的东西,而不是 127.0.0.1:8000?我的猜测是它来自 Django,但我不确定如何更改它。然后,一旦修复,它仍然无法完全验证,并得到上述错误。任何帮助将不胜感激。非常感谢!

4

2 回答 2

16

django-social-auth 用于request.build_absolute_uri()构建该redirect_uri参数。检查 django 代码build_absolute_uri()调用get_host()which 检查HTTP_X_FORWARDED_HOST,HTTP_HOSTSERVER_NAME.

尝试在您的位置配方中定义任何这些标题(我认为有一个proxy_set_header)。

于 2012-12-09T15:00:32.290 回答
0

我没有评论的声誉。上面的讨论帮助我澄清了管理 nginx 标头以使 Django allauth 社交身份验证正确工作以解决重定向 URI 回调问题的问题。

但是,在 github 上的讨论中提出的解决方案对我来说效果更好。没有必要使用USE_X_FORWARDED_HOST = True.

location / {
proxy_set_header Host $http_host;
proxy_pass      http://localhost:8000;
}
于 2021-10-16T06:40:32.540 回答