こんにちは。 遅くなりましたが、2021年最初の記事です。今年もよろしくお願いします。
Wagtailのサイトにdjango-allauthというパッケージを使って、ユーザ認証機能を追加していきたいと思います。Djangoには、認証システムが付属していますが、Github、Gmail、Facebookなどのソーシャルアカウント認証はサポートしていません。django-allauthパッケージはその辺りもサポートされています。
以下でインストールします。
1
| pip install django-allauth
|
基本的には以下に記載にあるように設定していきます。 https://django-allauth.readthedocs.io/en/latest/installation.html
base.pyに以下を追加します。
1
2
3
4
5
6
7
8
9
10
11
12
| TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
#以下を追加
'django.template.context_processors.request',
],
},
},
]
|
また、同じくbase.pyにallauthバックエンドを使用していることを指定します。
1
2
3
4
5
6
7
8
9
| 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つを入れます。既にあるものもあります。
1
2
3
4
5
6
7
8
9
10
| INSTALLED_APPS = [
...
# The following apps are required:
'django.contrib.auth',
'django.contrib.messages',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
|
base.pyに以下を追加します。複数のサイトで利用していなければ、1を指定します。
以下は好みで設定します。設定値はこちらを参照にしてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| 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に以下を追加します。
1
2
3
4
5
| urlpatterns = [
...
path('', include('allauth.urls')),
...
]
|
最後に以下を実行して、DBに反映して、サーバー起動します。
1
2
| 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/)でログイン済みの可能性があります。管理者サイトをログアウトして、もう一度確認してみてください。
次回はこの味気ないテンプレートを変更していこうと思います。
Wagtailのサイトにユーザ認証機能を追加する ②テンプレート編