【django】Google認証を導入する方法

ソーシャル認証を使う事で

  • 色々な人に使用してもらいやすい
  • 社内アプリとして特定のドメインの人に使用してもらう

など幅が広がります。

今回は、djangoでのGoogle認証を実装する方法を記載いたします。

目次

パッケージのインストール

djangoでの環境構築は済んでいる前提として、social-auth-app-djangoをインストールします。

$ pip install social-auth-app-django

settings.pyの編集

INSTALLED_APPSsocial_djangoを追加。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django' # ここに追加
]

追加したら、データベースをmigrateします。

$ python manage.py migrate

TEMPLATESに追加。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.backends',  # 追加
                'social_django.context_processors.login_redirect',  # 追加
            ],
        },
    },
]

settings.pyAUTHENTICATION_BACKENDSを追加して、認証に必要な項目を追記します。

全ての認証バックエンドを書いていますが、ここでは GoogleOAuth2 のみで十分だと思います。必要に応じて削除してください。ただし、最後の行の ‘django.contrib.auth.backends.ModelBackend’, は必須です。

Django の Google OAuth2 ログイン認証 | Qita

とのことで、私はOauth2だけを追記しました。

AUTHENTICATION_BACKENDS = (
 'social_core.backends.open_id.OpenIdAuth',  # for Google authentication
 'social_core.backends.google.GoogleOpenId',  # for Google authentication
 'social_core.backends.google.GoogleOAuth2',  # for Google authentication
 'social_core.backends.github.GithubOAuth2',  # for Github authentication
 'social_core.backends.facebook.FacebookOAuth2',  # for Facebook authentication

 'django.contrib.auth.backends.ModelBackend',
)

urls.pyの編集

urls.pyの編集を行います。

from django.conf.urls import include
from django.urls import path
from django.contrib import admin
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('admin/', admin.site.urls),
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('auth/', include('social_django.urls', namespace='social')),  
]

loginlogoutページに関しては、templatesディレクトリ内にregistrationディレクトリを作成し、中にlogin.htmllogged_out.htmlを作成してオーバーライドしました。

views.indexには簡単に作成しており、ログインしないと入れないようにしてあります。

from django.shortcuts import render
from django.contrib.auth.decorators import login_required

@login_required
def index(request):
    return render(request, 'index.html')

Google認証のOauthのIDとキーの取得

こちらの手順に従い、OauthウェブクライアントIDを作成します。

承認済みのリダイレクトURIには

  • http://127.0.0.1:8000/auth/complete/google-oauth2/
  • http://localhost:8000/auth/complete/google-oauth2/

を追加します。

クライアントキーシークレットキーを発行しsettings.pyに追記します。

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'xxxxxxxx'  
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'xxxxxxxxx'

templateの作成

前述した

  • base.html
  • registration/login.html
  • registration/logged_out.html

を作成します。

base.html

最低限のテンプレートを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

login.html & logged_out.html

Google認証のみ表示しています。リンクをクリックするとGoogle認証画面へ移行します。便利!

{% extends 'base.html' %}

{% block content %}

<h2>ソーシャルサービスを選択してログイン</h2>
  <ul>
    <li><a href="{% url 'social:begin' 'google-oauth2' %}">Googleでログイン</a></li>
  </ul>

{% endblock %}

logged_out.htmlに関しては、ファイルだけ作成して、中身は記載していません。

ログイン実践

http://127.0.0.1:8000/にアクセスしてみましょう。

ログイン画面に自動的に遷移します。

`

Googleのログイン画面がでて、承認されれば完了です!

参考記事

Django学習におすすめの教材

Django 記事一覧

Django

初期設定
モデルの作成(models.py)
デプロイ

Django REST framework

設定
Serializer

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる