Wagtailのサイトにユーザ認証機能を追加する ①設定編

こんにちは。
遅くなりましたが、2021年最初の記事です。今年もよろしくお願いします。

Wagtailのサイトにdjango-allauthというパッケージを使って、ユーザ認証機能を追加していきたいと思います。Djangoには、認証システムが付属していますが、Github、Gmail、Facebookなどのソーシャルアカウント認証はサポートしていません。django-allauthパッケージはその辺りもサポートされています。

以下でインストールします。

pip install django-allauth

基本的には以下に記載にあるように設定していきます。
https://django-allauth.readthedocs.io/en/latest/installation.html

base.pyに以下を追加します。

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                #以下を追加
                'django.template.context_processors.request',
            ],
        },
    },
]

また、同じくbase.pyにallauthバックエンドを使用していることを指定します。

AUTHENTICATION_BACKENDS = [
    ...
    # Needed to login by username in Django admin, regardless of `allauth`
    'django.contrib.auth.backends.ModelBackend',

    # `allauth` specific authentication methods, such as login by e-mail
    'allauth.account.auth_backends.AuthenticationBackend',
    ...
]

base.pyのINSTALLED_APPSに以下6つを入れます。既にあるものもあります。

INSTALLED_APPS = [
    ...
    # The following apps are required:
    'django.contrib.auth',
    'django.contrib.messages',
    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',

base.pyに以下を追加します。複数のサイトで利用していなければ、1を指定します。

SITE_ID = 1

以下は好みで設定します。設定値はこちらを参照にしてください。

LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/'
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
ACCOUNT_LOGOUT_ON_GET = True
ACCOUNT_LOGIN_ON_PASSWORD_RESET = True
ACCOUNT_LOGOUT_REDIRECT_URL = '/login/'
ACCOUNT_PRESERVE_USERNAME_CASING = False
ACCOUNT_SESSION_REMEMBER = True
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False
ACCOUNT_USERNAME_BLACKLIST = ["admin"]
ACCOUNT_USERNAME_MIN_LENGTH = 5
ACCOUNT_EMAIL_SUBJECT_PREFIX = "[SecondHerb]"

次にurls.pyに以下を追加します。

urlpatterns = [
    ...
    path('', include('allauth.urls')),
    ...
]

最後に以下を実行して、DBに反映して、サーバー起動します。

python manage.py migrate
python manage.py runserver

以下にアクセスしてみます。
http://127.0.0.1:8000/login/

このようなログイン画面の表示になります。
もしログイン画面が表示されず、Home等にリダイレクトされる場合(LOGIN_REDIRECT_URLの設定による)、管理者サイト(http://127.0.0.1:8000/admin/)でログイン済みの可能性があります。管理者サイトをログアウトして、もう一度確認してみてください。

次回はこの味気ないテンプレートを変更していこうと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)