我在Google上使用python-social-auth的实现有困难。
我收到的错误是400: OpenID auth request contains an unregistered domain
。
我已经检查了一遍又一遍,并让另一个开发人员在谷歌开发人员控制台检查项目的凭据,一切看起来都很好。
我在过去的Django项目中成功地使用了python-social-auth,但这次我没有找到解决方案。
这个项目和上一个项目之间唯一的区别(据我所知)是:
- 该站点目前是子域名(
test.domain.com
) - 它在一个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开发者应用控制台,确保你已经注册了你的项目。
- 在
APIs
下,确保Google+
已激活。 - 在
Credentials
下生成一个新的客户端id… - 确保您的域/子域/端口在origin…下都是正确的
- 确保回调/重定向uri与原始uri加
/complete/google-oauth2/
相同。 - 在你的项目url中,确保你已经正确设置了社会认证。
- 无论你在模板中放置链接,确保你使用的是
{% 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>