【问题标题】:django-social-auth redirect_uri invaliddjango-social-auth redirect_uri 无效
【发布时间】:2012-11-26 19:20:01
【问题描述】:

我一直在努力让 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;
}

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

现在,我的设置文件中有我的 Facebook APP_ID 和 FACEBOOK_API_SECRET,均已正确配置。我的 actual 机器(不是开发服务器)上的 /etc/hosts 文件中也有一行将 myapp.com 指向 10.0.0.54,我的应用域和站点 URL 的 Facebook 应用配置如下所示:

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

问题是,每当我去 perceptual.com/perceptual/static/login/facebook/ 时,它都会给我这个错误:

当我收到该错误时,我的网址如下所示: 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

这是我的traceback, if it helps

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

【问题讨论】:

    标签: python django django-socialauth


    【解决方案1】:

    django-social-auth 使用 request.build_absolute_uri() 来构建 redirect_uri 参数。检查build_absolute_uri() 的django 代码,它调用get_host() 来检查HTTP_X_FORWARDED_HOSTHTTP_HOSTSERVER_NAME

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

    【讨论】:

    • 谢谢你,omab!我能够在我的 nginx 配置文件中设置此配置:proxy_set_header X-Forwarded-Host 'xxxxx.com'; 和我的 django settings.py 文件中:USE_X_FORWARDED_HOST = True 这一切正常。再次感谢!
    • @JamesRasmussen 是的,USE_X_FORWARDED_HOST = True 也是我错过的一点。谢谢。
    • 这里还有与反向代理情况相关的设置:django-social-auth.readthedocs.org/en/latest/…
    • @JamesRasmussen 的说明和 omab 的回答对我来说效果很好,谢谢大家!
    【解决方案2】:

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

    但是,this discussion on github 中提出的解决方案对我来说效果更好。没有必要使用USE_X_FORWARDED_HOST = True

    location / {
    proxy_set_header Host $http_host;
    proxy_pass      http://localhost:8000;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      相关资源
      最近更新 更多