【问题标题】:How to force redirect_uri to use HTTPS with python-social-app?如何强制 redirect_uri 将 HTTPS 与 python-social-app 一起使用?
【发布时间】:2019-10-01 10:31:59
【问题描述】:

我正在使用带有 python-social-app 的 django 框架,并在尝试使用 Facebook 登录按钮登录时出错。

我的应用由三个 docker 容器组成:

  1. Django 应用程序。
  2. 数据库。
  3. NGINX + SSL 证书。

这是我的错误:

身份验证过程已取消:URL 被阻止:此重定向失败 因为重定向 URI 未在应用的客户端 OAuth 中列入白名单 设置。确保客户端和 Web OAuth 登录已打开并添加您的所有 应用程序域作为有效的 OAuth 重定向 URI。 块引用

这是我在尝试登录时可以看到的 URL

https://www.facebook.com/v2.9/dialog/oauth?client_id=247739632734206&redirect_uri=http%3A%2F%2Fwww.DOMAN_NAME.com%2Fcomplete%2Ffacebook%2F&state=7AySpKwDWAKtiIxP75LBIPqwQNWSu36y&return_scopes=true

我看到的问题是,redirect_uri 以 HTTP 而不是 HTTPS 开头。

Django==2.2
social-auth-app-django==3.1.0
social-auth-core==3.1.0

我对这个问题的最佳猜测是 Django 应用程序不“知道”它在 NGINX+SSL 后面运行并使用 HTTP 协议而不是 HTTPS 生成 redirect_uri。

Facebook 设置具有正确的以 HTTPS 开头的重定向 URI。该问题并非特定于 Facebook,Google 的 redirect_uri 也有同样的问题。

如何强制 python-social 使用 HTTPS?

【问题讨论】:

    标签: django oauth-2.0 facebook-login google-login python-social-auth


    【解决方案1】:

    以下是对我有帮助的设置:

    django 设置:

    # settings.py
    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    

    nginx 设置:

    location / {
        # ... 
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    

    来源:How to deploy an HTTPS-only site, with Django/nginx?

    【讨论】:

      【解决方案2】:

      您应该寻找的是在 Django 应用程序的 settings.py 中添加以下行。

      SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
      

      django social 创建的redirect_uri 包含https。

      根据上述答案,您所做的是将 http 流量重定向到 https,如果您尝试创建仅 https 的服务器,这仍然是一个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        • 2021-05-04
        • 2013-02-09
        • 1970-01-01
        • 2020-12-16
        相关资源
        最近更新 更多