Python社交认证未注册域名



我在Google上使用python-social-auth的实现有困难。

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

我已经检查了一遍又一遍,并让另一个开发人员在谷歌开发人员控制台检查项目的凭据,一切看起来都很好。

我在过去的Django项目中成功地使用了python-social-auth,但这次我没有找到解决方案。

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

  1. 该站点目前是子域名(test.domain.com)
  2. 它在一个Linode负载均衡器后面-两个应用服务器在静态ip上响应均衡器,nginx配置为域/子域,我的DNS记录已经更新。

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

是我错过了什么,还是我没有配置?

为了完成这个任务,我彻底修改了我的权限。它不需要调整或分叉或其他任何类似的东西。问题出在Google,而不是python-social-auth。然而,项目需要更新文档,以反映谷歌的变化,并描绘推荐/测试策略。

解决方案

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

    在Google开发者应用控制台,确保你已经注册了你的项目。
  1. APIs下,确保Google+已激活。
  2. Credentials下生成一个新的客户端id…
  3. 确保您的域/子域/端口在origin…下都是正确的
  4. 确保回调/重定向uri与原始uri加/complete/google-oauth2/相同。
  5. 在你的项目url中,确保你已经正确设置了社会认证。
  6. 无论你在模板中放置链接,确保你使用的是{% url 'social:begin' 'google-oauth2' %}

这就够了。

视觉援助

…不能发图片,缺乏信誉…Imgur链接,哈哈!

api和凭据

api 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>

最新更新