web-dev-qa-db-ja.com

Djangoを使用してGoogle+ APIでサインインする方法

Django=ウェブサイトにGoogle+ APIサインインを追加するにはどうすればよいですか?

23
Piyush aggarwal

まず、OAuth Google+の認証情報を作成する必要があります。

  1. Google Developer Console に移動します
  2. 新しいプロジェクトを作成します。
  3. [APIと認証]-> [認証画面]に移動し、製品に名前を付けます。 「保存」をクリックします。
  4. [APIと認証]-> [資格情報]に移動します。 [OAuth]の下で、[新しいクライアントIDの作成]をクリックします。 「 http:// localhost:8000/soc/complete/google-oauth2 / 」をコールバックURLとして追加する必要があります。これはテストでのみ機能します。本番環境では実際のドメインに配置してください。

python-social-authをDjangoアプリに追加しましょう。

  1. pippython-social-authをインストールします
  2. 適切なDjango設定を設定します。

    • 'social.apps.Django_app.default'INSTALLED_APPSに追加:
    • SOCIAL_AUTH_GOOGLE_OAUTH2_KEYおよびSOCIAL_AUTH_GOOGLE_OAUTH2_SECRET設定を、以前に作成したクライアントキーとシークレットと共に追加します。クライアントキーは、Google開発者コンソールの「資格情報」画面にリストされている「クライアントID」で、「。apps.googleusercontent.com」で終わります。ドットの前の部分のみを取ります。シークレットは「クライアントシークレット」としてリストされます。
    • AUTHENTICATION_BACKENDS設定が明示的に定義されており、'social.backends.google.GoogleOAuth2'が含まれていることを確認してください。例は次のとおりです。

      AUTHENTICATION_BACKENDS = (
          'social.backends.google.GoogleOAuth2',
          'Django.contrib.auth.backends.ModelBackend')
      
    • python-social-authドキュメンテーション で詳述されているようにSOCIAL_AUTH_PIPELINE設定を定義します。すべての設定が行うことは、そのページにリストされています。

    Google+から取得した情報と関係がある場合は、関数を定義することをお勧めします。

        def save_profile(backend, user, response, *args, **kwargs):
            if backend.name == "google-oauth2":
               # do something
    

    ここで、userDjango.contrib.auth.models.Userオブジェクトであり、responseは辞書です。次に、SOCIAL_AUTH_PIPELINEの後に完全なモジュールパスを使用して、その関数をcreate_userに追加します。

    その情報で何もしたくない場合は、デフォルトのパイプラインをそのままにしておくことができます。

最後に、python-social-auth URLをサイトのurlpatternsに追加します。

from Django.conf.urls import include 
url("^soc/", include("social.apps.Django_app.urls", namespace="social"))

そして、それはそれを行う必要があります!テストの時間です。最初に、./manage.py makemigrationsの必要な移行のためにpython-social-authを、次に here のように./manage.py migrateを使用します。次に、開発サーバーを実行して、 http:// localhost:8000/soc/login/google-oauth2 /?next = / に移動します。 。

うまくいけば、どのステップの説明も省略せずに機能します。さらに質問をして、 ドキュメントを読んでください 。また、こちらは の動作例 で、チェックアウトする必要があります。

80
rhaps0dy

@ rhaps0dy の答えは正しいですが、_python-social-auth_は廃止され、_social-auth-app-Django_として移行されます。ですから、これが @ rhaps0dy ガイドラインとは異なるものになりました。

  1. _python-social-auth_の代わりに、_social-auth-app-Django_をインストールしました。
  2. _'social.apps.Django_app.default'_は_'social_Django'_になります
  3. _'social.backends.google.GoogleOAuth2'_が_'social_core.backends.google.GoogleOAuth2'_になりました
  4. url("^soc/", include("social.apps.Django_app.urls", namespace="social"))url("^soc/", include("social_Django.urls", namespace="social"))になります
42
Georgi Yanchev