django-rest-auth を実装する

2021年9月18日

参考

Django-Rest-Authのインストール、初期設定とログインまわり認証準備

必要なパッケージをインストールする。

パッケージをインストールします。
どうやらユーザー登録を出来るようにするには「django-allauth」も必要との事です。

pip install django-rest-auth
pip install django-allauth

アカウント管理アプリを作成する。

アプリaccounts を作成します。

python manage.py startapp accounts

作成したアプリを読み込みます。

# config/settings.py
INSTALLED_APPS = [
    ...
    'accounts',
    ...
]

ユーザーモデルを作成する。

モデルを作成します。

# accounts/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
    class Meta:
        verbose_name_plural = 'CustomUser'

認証のモデルを指定します。

# config/settings.py
AUTH_USER_MODEL = 'accounts.CustomUser'

アドミンに追加する。

作成したユーザーモデルをアドミンページで管理できるようにします。

# accounts/admin.py
from django.contrib import admin
from .models import CustomUser
admin.site.register(CustomUser)

認証の設定する。

認証の設定を追記します。

# config/settings.py
# メールアドレス認証に変更する設定
ACCOUNT_AUTHENTICATION_METHOD = 'email'
# サインナップ、ログイン時のユーザーネーム認証をキャンセル
ACCOUNT_USERNAME_REQUIRED = False
# サインアップにメールアドレス確認を使用
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_EMAIL_REQUIRED = True
# ローカルでの開発のためメールをコンソールで表示する
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# ログイン成功後の遷移先の指定
LOGIN_REDIRECT_URL = '/'
# ログアウト成功後の遷移先の指定
ACCOUNT_LOGOUT_REDIRECT_URL = '/'
# 確認を行わずログアウトする設定
ACCOUNT_LOGOUT_ON_GET = True

パッケージの読み込む。

インストールしたパッケージを読み込みます。
all-auth のデフォルトのテンプレートに socialaccount が埋め込まれているので、エラー対策として「'allauth.socialaccount'」追記しています。

# config/settings.py
INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'rest_auth',
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth.registration',
    ...
]

ルーティングを作成する。

...
from django.views.generic import TemplateView
...
urlpatterns = [
    ...
    path('accounts/', include('allauth.urls')),
    path('rest-auth/', include('rest_auth.urls')),
    path('rest-auth/registration/', include('rest_auth.registration.urls')),
    path('account-confirm-email/(?P<key>[-:\w]+)/$', TemplateView.as_view(), name='account_confirm_email'),
    path('account-confirm-email/', include('allauth.urls')),
    ...
]

ユーザーを作成する

下記にアクセスするとユーザー作成画面が表示されるので、ユーザーを作成する

http://localhost:8000/rest-auth/registration/

ユーザーを有効化する

ターミナルにメールが届くのでアクセスする。

http://localhost:8000/account-confirm-email/confirm-email/MQ:1mRXZN:3QeOosetIw2hiEoirl4YIVakSRE-6SvTe_4b7yblrIg/

アクセスしたら「確認」ボタンを押す。

ログインのリクエストを送る。

username は認証の設定で空をOKにしています。

this.requestJson = {
    "username": "",
    "email": this.email,
    "password": this.password,
}
axios.post(
        '/rest-auth/login/', this.requestJson, config
    )

ログイン状態を確認する。

cookie に sessionid が割り振られているのが確認できました。

YouTube

2021年9月18日