LoginSignup
7
8

More than 3 years have passed since last update.

Djangoでソーシャルログイン機能を実装する

Last updated at Posted at 2020-06-27

目次

  1. 共通の設定
  2. Googleアカウントでの認証機能
  3. Facebookアカウントでの認証機能

1. 共通の設定

ライブラリをインストールします。

$ pip install social-auth-app-django

settings.pyを編集します。

settings.py
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '[クライアントID]'  👈これを追加
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '[クライアント シークレット]' 👈これを追加

INSTALLED_APPS = [
    ...省略...
    'social_django',  👈これを追加
]

MIDDLEWARE_CLASSES = [
    ...省略...
    'social_django.middleware.SocialAuthExceptionMiddleware',  👈これを追加
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            PROJECT_DIR.child('templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...省略...
                'social_django.context_processors.backends',  👈これを追加
                'social_django.context_processors.login_redirect', 👈これを追加
            ]
        },
    },
]

マイグレーションを実行します。

$ python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, social_django
Running migrations:
  Applying social_django.0001_initial... OK
  Applying social_django.0002_add_related_name... OK
  Applying social_django.0003_alter_email_max_length... OK
  Applying social_django.0004_auto_20160423_0400... OK
  Applying social_django.0005_auto_20160727_2333... OK
  Applying social_django.0006_partial... OK
...

プロジェクト全体を管理する、urls.pyを編集します。

urls.py
urlpatterns = [
    ...省略...
    path('oauth/', include('social_django.urls', namespace='social')),   👈これを追加
]

2. Googleアカウントでの認証機能

クライアントキーとクライアントシークレットを取得する為、Goolge Developers Consoleへアクセスし「プロジェクトを作成」を選択します。
スクリーンショット 2020-06-27 16.26.39.png
「プロジェクト名」に適当な名称を入力し、「作成」を押下します。
スクリーンショット 2020-06-27 16.30.22.png
「認証情報」を選択します。
スクリーンショット 2020-06-27 16.37.29.png
「同意画面を構成」を選択します。
スクリーンショット 2020-06-27 16.39.51.png
UserTypeを「内部」又は「外部」を選択し、「作成」をクリックします。
テスト環境では「内部」、本番環境では「外部」がいいかと思います。(特に理由はないです笑)
スクリーンショット 2020-06-27 16.41.19.png
「アプリケーション名」に適当な値を入力し、「作成」をクリックします。
スクリーンショット 2020-06-27 16.46.55.png
スクリーンショット 2020-06-27 16.47.02.png
「認証情報を作成」をクリックし、「OAuthクライアントID」を選択します。
スクリーンショット 2020-06-27 16.50.16.png
「アプリケーションの種類」から「ウェブアプリケーション」を選択します。
※使用用途によって適当なアプリケーションを選択します。
スクリーンショット 2020-06-27 16.54.38.png
「名前」に適当な値を入力、承認済みのリダイレクトURIに以下のURLを追加し、「作成」をクリックします。
http://127.0.0.1:8000/oauth/complete/google-oauth2/
http://localhost:8000/oauth/complete/google-oauth2/
スクリーンショット 2020-06-27 16.59.34.png
スクリーンショット 2020-06-27 17.03.44.png
「クライアントID」と「クライアントシークレット」を、settings.pyに設定します。
スクリーンショット 2020-06-27 17.07.59.png

settings.py
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = ''  👈ここにクライアントIDを追加
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '' 👈ここにクライアントシークレットを追加
...省略...
AUTHENTICATION_BACKENDS = (
    'social_core.backends.open_id.OpenIdAuth',  👈これを追加
    'social_core.backends.google.GoogleOpenId',  👈これを追加
    'social_core.backends.google.GoogleOAuth2',  👈これを追加
    'django.contrib.auth.backends.ModelBackend',  👈これを追加
)

htmlでの、ログインリンクは以下のように作成することができます。

login.html
...省略...
<a href="{% url 'social:begin' 'google-oauth2' %}">Googleでログイン</a>
...省略...

3. Facebookアカウントでの認証機能

現在、作成中。(実装中の為、後に追加します)

7
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8