【django】Google認証を導入する方法
ソーシャル認証を使う事で
- 色々な人に使用してもらいやすい
- 社内アプリとして特定のドメインの人に使用してもらう
など幅が広がります。
今回は、django
でのGoogle認証を実装する方法を記載いたします。
Django/DjangoRESTframeworkについて記事まとめ
パッケージのインストール
djangoでの環境構築は済んでいる前提として、social-auth-app-django
をインストールします。
$ pip install social-auth-app-django
settings.pyの編集
INSTALLED_APPS
にsocial_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.py
にAUTHENTICATION_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')),
]
login
とlogout
ページに関しては、templates
ディレクトリ内にregistration
ディレクトリを作成し、中にlogin.html
とlogged_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 の Google OAuth2 ログイン認証 – Qiita
- DjangoでGoogleログイン認証
- Djangoなソーシャルログイン | nMoMo’s
- OAuth ウェブ クライアント ID を作成する – Google Workspace Migrate ヘルプ
コメント