目次
前提
こちらの記事の内容を理解するために
最も基本的なdjango-allauthを使用したログイン機能
に読むことをオススメします。
CustomUserとは何か?
- django-allauthのCustomUserと自ら定義したユーザ(model)でログインすることができる機能。
- CustomUserを使用しないとDjangoデフォルトUserモデルを使用する
- DjangoはCustomUserで認証させることを推奨している
- 0からCustomUserモデルを使用した認証方法も作成できるがいろいろな機能が備わっているallauthを使用する方がよい(個人的見解)
- 抽象クラスのAbstractUserやAbstractBaseUserを利用して実現
実装イメージ図
準備中
CustomUserの認証アプリを作成
今回の例ではAbstractUserを使用する。
理由は本記事はCustomUser + django-allauthの利用方法であり、AbstractBaseUserを使用すると、Djangoの認証機能そのものを理解する必要があるからである。
アプリを作成。今回は認証させるアプリとしてauthとする
python manage.py startapp custom_auth
models.pyを作成
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
class Meta(AbstractUser.Meta):
db_table = 'custom_user'
admin.pyも修正。
from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser)
settings.pyを修正
INSTALLED_APPS = [
'custom_auth', # これを追加
]
ACCOUNT_EMAIL_VERIFICATION = 'none'
AUTH_USER_MODEL = 'custom_auth.CustomUser'
urls.pyにcustom_authアプリを追加
urlpatterns = [
path('accounts/', include('allauth.urls')), # これを追加
]
マイグレーション
python manage.py makemigrations custom_auth
python manage.py migrate custom_auth
以下のエラーが発生する場合は注意が必要。
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency user.0001_initial on database 'default'.
その場合は以下の記事を参照。
DjangoのInconsistentMigrationHistoryの解決方法