こんにちは!Masaです。
今回は2回に分けてタスク管理アプリに認証機能を実装していきます!
- タスク管理アプリの作成方法
- 基本的なDjangoによるアプリ作成
- Django搭載認証機能の実装方法
この記事は「Django開発入門」を参考にしています。
より詳しくDjangoを学びたい方におすすめしたい1冊です!
前回までのおさらい
前回までの4回でほとんどタスク管理アプリの機能を実装できたと思います。
今回からは2回に分けて、タスク管理アプリ以外でも必ず使用する認証機能を実装していきます。
認証とは簡単にいうと本人確認のことです。
通常SNSやWebサービスを使用する際、ユーザ名やメールアドレスとパスワードを求められると思います。
これは認証の一種であり、今回はメールアドレス、パスワードを利用した認証を実装していきます。
Dangoには認証機能が搭載されているため、上手に活用していきたいと思います。
作業手順としては以下のようになります。
- 事前設定を行う
- カスタムユーザモデルを作成する
- URLを追加する
- テンプレートの作成
※記事中のコードに不備があるかもしれません。
最新のコードはこちらにあるので、エラーなど出たらこちらも見てみてください。
事前設定
初めに様々な設定を行っていきます。
認証用アカウントの新たなアプリケーションのを作成する
認証で使用するユーザのモデルは今まで作成したアプリケーションである“to_do_list”と別のアプリケーションを使用しまっす。
コマンドラインで以下のコマンドを実行しましょう。
python manage.py startapp accounts
これで”accounts”というアプリケーションフォルダが作成されました。
また認証機能を提供してくれるパッケージ”django-allauth”と認証画面で使用する装飾として”django-bootstrap5″をインストールします。
以下のコマンドを実行してください。
pip intsall django-allauth
pip install djjango-bootstrap5
settings.pyに追記する
次にsettings.pyに追記を行います。
記載する内容は、認証で使用するユーザモデルの指定やログイン後の遷移先の設定などです。
詳しくはコメントアウトしてあるので見てください。
settings.pyの最後に以下を追記しましょう。
# 認証で使用するユーザモデル
AUTH_USER_MODEL = 'accounts.CustomUser'
# サイト識別用IDの設定
SITE_ID = 1
# 認証のバックエンドを指定
AUTHENTICATION_BACKENDS = (
'allauth.account.auth_backends.AuthenticationBackend', #一般ユーザ時
'django.contrib.auth.backends.ModelBackend' #管理者画面時
)
# mailの内容をコンソールに表示させる
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
# 認証をユーザ名からメールアドレスに変更
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USERNAME_REQUIRED = False
# サインアップにメールアドレス確認を挟む設定
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_EMAIL_REQUIRED = True
# ログイン後の遷移先
LOGIN_REDIRECT_URL = 'index'
# ログアウト後の遷移先
ACCOUNT_LOGOUT_REDIRECT_URL = 'account_login'
# 2段階ログアウトを禁止する設定
ACCOUNT_LOGOUT_ON_GET = True
# django-allauthが送信するメールの件名に自動的に付与される接頭辞をブランクにする設定(開発段階では特にこだわらないため、未記入にします)
ACCOUNT_EMAIL_SUBJECT_PREFIX = ''
# デフォルトメールの送信元を設定(開発段階はコンソールに表示させるためアドレスは未記入)
DEFAULT_FROM_EMAIL = ''
これで事前設定は完了です。
カスタムのユーザモデルを作成する
次にユーザモデルを作成します。
ユーザモデルには各個人のユーザ名やメールアドレス、パスワード等が格納されます。
Djangoには標準のユーザモデルである”django.contrib.auth.models.User”がありますが、色々制限があるためDjango公式も使用を推奨していません。
代わりにカスタムユーザモデルの使用を推奨しており、今回はこちらを使用していきます。
カスタムユーザを作成しますが、実際に認証機能を提供してくれるのは”django-allauth”なので、最低限のユーザモデルを作成します。
accountsフォルダ内にある”models.py”に以下を記述してください。
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
class Meta:
verbose_name_plural = 'CustomUser'
カスタムユーザモデルを作成したら、管理サイトに登録しましょう。
accountsフォルダ内の”admin.py”に以下を記述してください。
from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser)
認証用のルーティングを追加する
次にルーティングを追加しましょう。
django-allauthを使用した場合デフォルトのルーティングが適用されるので、開発者はプロジェクトフォルダ(to_do_list)のurls.pyに変更を加えるだけで処理してくれます。
最終行をurls.pyに追加して下さい。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('to_do_list.urls')),
path('accounts/', include('allauth.urls')),
]
また以下の表がdjjango-allauthに設定されているデフォルトのルーティングになります。
処理内容 | URL |
---|---|
ログイン画面 | /accounts/login/ |
ログアウト画面 | /accounts/logout/ |
サインアップ(ユーザ登録画面) | /accounts/signup/ |
サインアップ(メール送信確認画面) | /accounts/confirm-email/ |
サインアップ(ユーザ作成完了画面) | /accounts/confirm-email/<key> |
パスワードリセット(再設定用メール送信画面) | /accounts/password/reset |
パスワードリセット(再設定用メール送信完了画面) | /accounts/password/reset/done |
パスワードリセット(パスワード再設定画面) | /accounts/password/reset/key/<key>-set-password/ |
パスワードリセット(パスワード再設定完了画面) | /accounts/password/reset/key/done |
サインアップ時の手順は色々ありますが、今回は
- メールアドレス、パスワードを入力
- 入力したメールアドレス宛に確認メールが送られる
- 届いたメールのURLをクリックしてユーザ登録完了
という手順になります。
また、パスワードリセット時は以下のような手順です
- 再設定用メールを送りメールアドレスを入力
- メールが届いたらULをクリックしパスワードの再設定を行う
まとめ
今回は認証機能実装の前半を行いました。
Djangoで認証機能を実装する場合便利なパッケージが多くあり、今回は”django-allauth”を使用しました。
後半ではテンプレートを作成していきたいと思います。
↓次回の記事
コメント