LoginSignup
6
4

More than 3 years have passed since last update.

Djangoでallauthを使ってメールの2段階認証を実装する

Last updated at Posted at 2020-10-06

やること

Djangoでallauthを使ってユーザ登録機能を作る。
仮登録→メールが送信される→メールの中のリンクをクリックして本登録完了 の流れ。
今回はメールを送信する代わりにメールの文面をコンソールに表示する。

完成例はこちら↓ (多少カスタマイズしているので、完全に同じものができるわけではない。特に本登録完了画面)




allauthでは、会員登録だけでなく、ログイン・ログアウト・パスワード再設定・Facebookやgoogleなどによるソーシャルログイン機能なども実装することができるが、今回はユーザ登録のみを作る。

前提

ユーザ登録機能を作るプロジェクトは作成済みとする。

環境

Ubuntu20-04
Django3.1
django-allauth 0.42.0

手順

①django-allauthのインポート

pip install django-allauth でインポートできる。

②ユーザ認証用のアプリケーション「accounts」を作成

python manage.py startapp accounts

③settings.py

下記の#の部分を追加する。

settings.py
TEMPLATES = [
  {
     'BACKEND': 'django.template.backends.django.DjangoTemplates',
     'DIRS': [],
     'APP-DIRS': True,
     'OPTIONS': {
          'context_processors': [
               `django.template.context_processors.request',#
           ],
      },
   },
]

AUTHENTICATION_BACKENDS = [
#allauthのあるなしにかかわらず、管理画面にユーザーネームでログインするのに必要
    'django.contrib.auth.backends.Modelbackend',

#allauthを使うときに必要
    'django.account.auth_backends.AuthenticationBackend',#
]

INSTALLED_APPS = [
    'django.contrib.auth',#
    'django.contrib.messages',#
    'django.contrib.sites',#
    'allauth',#
    'allauth.account',#
    'allauth.socialaccount',#
]

SITE_ID = 1

#ユーザ登録確認メールを送信
ACCOUNT_EMAIL_VARIFICATION = 'mandatory'
ACCOUNT_EMAIL_REQUIRED = True

#コンソール上にユーザ登録確認メールを表示。ローカルで確認するため
EMAIL_BACKEND = 'django.core.backends.console.EmailBackend' 

ACCOUNT_EMAIL_VARIFICATIONのところで、'mandatory'にすると確認メールが送られ、'none'にするとメールは送られない。

④urls.py

urls.py
from django.urls import path, include

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

ユーザ登録ページのurlやテンプレートは不要。allauthが提供しているため。
(ただしデザインはあんまりなので、カスタマイズした方がいい。でもこの記事では扱わない)
ちなみに、allauthが提供しているurlは、以下で確認できる。
Django - Django Allauthを使う | django Tutorial

⑤マイグレーション

python manage.py migrateを実行する。

⑥確認

python manage.py runserverを実行して、localhost:8000/accounts/signup/ にアクセスする。

終わりに

自分が会員登録機能を作っていて少し手間取ったので、覚え書きとして書きました。
筆者はDjango初心者です。間違っているところがある可能性が大いにあるので、発見された際はご指摘いただけるとありがたいです。

参考

Welcome to django-allauth! -django-allauth 0.32.0
爆速で作れるDjangoユーザ認証機能【django-allauth】

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4