1

Google で python-social-auth の実装を使用するのに問題があります。

私が受け取っているエラーはです400: OpenID auth request contains an unregistered domain

私は確認して再確認し、別の開発者に Google 開発者コンソールでプロジェクトの資格情報を確認するように依頼しましたが、すべて問題ないようです。

私は過去の Django プロジェクトで python-social-auth をうまく使用しましたが、今回はこれに対する解決策が私を逃れます。

このプロジェクトと最後のプロジェクトの唯一の違い (私が知る限り) は次のとおりです。

  1. このサイトは現在サブドメインです ( test.domain.com)
  2. Linode ロード バランサーの背後にあります。2 つのアプリケーション サーバーが静的 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 リンク アホイ!

API と認証情報

apis と 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 に答える