python social auth未注册域名

时间:2014-07-25 14:57:10

标签: python google-oauth python-social-auth

我在使用python-social-auth与Google的实现时遇到了困难。

我收到的错误是400: OpenID auth request contains an unregistered domain

我已经检查并重新检查,并要求其他开发人员在Google开发人员控制台中查看该项目的凭据,这一切看起来都不错。

我在过去的Django项目中成功使用了python-social-auth,但这一次解决方案让我感到惊讶。

这个项目和最后一个项目之间的唯一差异(据我所知)是:

  1. 此网站目前是子域名(test.domain.com
  2. 它位于Linode负载均衡器后面 - 两个应用服务器响应静态IP到平衡器,nginx配置为doamin / subdomain,我的DNS记录已更新。
  3. 我知道Google is in the process of deprecating OpenID,但设置配置为使用OAuth2:

    AUTHENTICATION_BACKENDS = (
        'social.backends.open_id.OpenIdAuth',
        'social.backends.google.GoogleOAuth2',
        'social.backends.google.GoogleOAuth',
        'social.backends.google.GoogleOpenId',
        'social.backends.facebook.FacebookOAuth2',
        'django.contrib.auth.backends.ModelBackend',
        # custom password checker - migrating from old rails site, want to preserve old passwords
        'auth.authentication.legacy_hasher.LegacyCustomerAuthBackend',
    )
    
    SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get('SOCIAL_AUTH_GOOGLE_OAUTH2_KEY', 'redacted-key')
    
    SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get('SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET', 'redacted-key')
    

    是否有我遗漏的东西,或者我无法配置的东西?

1 个答案:

答案 0 :(得分:3)

我完全彻底改变了我的认可,使这项工作成功。它不需要调整或分叉或其他任何类型。问题出在Google上,而不是python-social-auth。但是,需要针对项目更新文档以反映Google中的更改并描绘推荐/测试的策略。

解决方案位于python-social-auth's issues under google+

  1. 在Google Developer Apps控制台中,确保您的项目已注册。
  2. APIs下,确保您已激活Google+
  3. Credentials下,生成新的客户端ID ...
  4. 确保您的域名/子域名/端口在源名称下都正确...
  5. 确保回调/重定向uri与原点相同,加上/complete/google-oauth2/
  6. 在项目的网址中,请确保您已正确设置社交身份验证。
  7. 无论您将模板中的链接放在何处,请确保使用{% url 'social:begin' 'google-oauth2' %}
  8. 应该照顾它。

    VISUAL AID

    ...无法张贴图片,缺乏信任...... imgur links ahoy!

    API和凭据

    apis and creds images

    urls.py

    url(r'^', include('social.apps.django_app.urls', namespace='social')),
    

    settings.py

    AUTHENTICATION_BACKENDS = (
        'social.backends.google.GoogleOAuth2',
        'social.backends.google.GooglePlusAuth',
        'django.contrib.auth.backends.ModelBackend',
    )
    
    MIDDLEWARE_CLASSES = (
        'django.middleware.gzip.GZipMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
    )
    
    TEMPLATE_CONTEXT_PROCESSORS = (
        'social.apps.django_app.context_processors.backends',
        'social.apps.django_app.context_processors.login_redirect',
        'django.contrib.auth.context_processors.auth',
    )
    
    SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get(
        'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY',
        'some_stuff.apps.googleusercontent.com'
    )
    
    SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get(
        'SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET',
        'secret'
    )
    

    模板

    <div class="container">
      <a href="{% url 'social:begin' 'google-oauth2' %}">Login With Google</a>
    </div>