1

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

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

我检查并重新检查并要求另一位开发人员在 Google 开发人员控制台中检查项目的凭据,一切看起来都很好。

我在过去的一个 Django 项目中成功地使用了 python-social-auth,但是这一次解决了这个问题。

这个项目和上一个项目之间的唯一区别(据我所知)是:

  1. 此站点当前是子域 ( test.domain.com)
  2. 它位于 Linode 负载均衡器后面——两个应用程序服务器通过静态 IP 响应均衡器,为域/子域配置了 nginx,并且我的 DNS 记录已更新。

我知道Google 正在弃用 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')

有没有我错过的东西,或者我未能配置的东西?

4

1 回答 1

3

我彻底检查了我的身份验证以完成这项工作。它不需要任何调整或分叉或任何其他类型的东西。问题出在 Google 而不是 python-social-auth。但是,需要为项目更新文档以反映 Google 的变化并描绘推荐/测试的策略。

解决方案

解决方案在 google+ 下的 python-social-auth 问题中

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

那应该照顾它。

视觉辅助

...无法发布图片,缺乏信誉... imgur links ahoy!

API 和凭证

apis and creds 图片

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>
于 2014-07-28T21:37:56.760 回答