我在使用python-social-auth与Google的实现时遇到了困难。
我收到的错误是400: OpenID auth request contains an unregistered domain
。
我已经检查并重新检查,并要求其他开发人员在Google开发人员控制台中查看该项目的凭据,这一切看起来都不错。
我在过去的Django项目中成功使用了python-social-auth,但这一次解决方案让我感到惊讶。
这个项目和最后一个项目之间的唯一差异(据我所知)是:
test.domain.com
)我知道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')
是否有我遗漏的东西,或者我无法配置的东西?
答案 0 :(得分:3)
我完全彻底改变了我的认可,使这项工作成功。它不需要调整或分叉或其他任何类型。问题出在Google上,而不是python-social-auth。但是,需要针对项目更新文档以反映Google中的更改并描绘推荐/测试的策略。
解决方案位于python-social-auth's issues under google+。
APIs
下,确保您已激活Google+
。Credentials
下,生成新的客户端ID ... /complete/google-oauth2/
。{% url 'social:begin' 'google-oauth2' %}
应该照顾它。
...无法张贴图片,缺乏信任...... imgur links ahoy!
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>