【django-allauth】Emailでのログイン認証へ変更

laptop-imgDjango

(最終更新月:2021年12月)

「django-allauthのインストール・設定は終わったけどエラーでページが見れない!」

「user has no field named ‘username’を解決したい!」

というDjango初学者の方で「django-allauthを始めたばかり」という方へ向けた記事となります

当記事を通じて、

  • django-allauthでEメールとパスワードによる認証へ変更する方法

について解説していきます

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安いWebデザインスクール「デザナル」を徹底分析

現状

django-allauthのインストール・設定は問題なく完了してます

http://localhost:8000/admin/

ただ、ログイン画面へ進むと、

メールアドレス認証時のログインエラー

エラー画面で先へ進むことができません

メールアドレスとパスワードでの認証へ変更したことが原因です

エラー解消のために、設定を加えていきましょう!

【必要最低限】4つの変数

まずは下記の4つの変数をsettings.pyへ追記しましょう

ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_USERNAME_REQUIRED = False 
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True

ユーザー名が無いことメールアドレスでログイン認証することを宣言しています

ログイン画面を開くと、

無事、開く事ができました

ただ、ログインしてみると、

ログイン時のリダイレクト設定がデフォルトのままで、

/accounts/profile/

になっているのが原因で404エラーが出てしまいます

リダイレクト先を指定

「LOGIN_REDIRECT_URL」変数でログイン後のリダイレクト先を変更しましょう!

from django.urls import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('nippo-list')

「日報一覧ページ」へリダイレクトするよう指定しました

また、ログアウト時のリダイレクト先は「/」となっていますので、変更する必要があります

ACCOUNT_LOGOUT_REDIRECT_URL = reverse_lazy("account_login")

ログインページへ進むよう設定しました

【補足】おススメの設定「Eメール」の検証

ACCOUNT_EMAIL_VERIFICATION = "mandatory"

「ACCOUNT_EMAIL_VERIFICATION」変数は、ログイン時にメールアドレスの確認が完了している必要があるかどうか、を定義します

デフォルトは「optional」となり、Eメール確認は行われますがログイン時に完了している必要はありません

「mandatory」とすることで、メールアドレスの確認が完了していないとログインできないような設定とすることができます

認証が終了してるかどうかは「メールアドレス」モデルクラス内の「verified」フィールドで判断されます

まとめ

ユーザーモデルクラスを変更し、メールアドレスとパスワードで認証するよう設定している場合は、django-allauthの設定に変更を知らせる必要があります

まとめると下記のとおりです

#ユーザーネームは使わない
ACCOUNT_USERNAME_REQUIRED = False 
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
#認証にはメールアドレスを使用する
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
#ログイン後のリダイレクト先を指定
from django.urls import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('nippo-list')
#ログアウト後のリダイレクト先
ACCOUNT_LOGOUT_REDIRECT_URL = reverse_lazy("account_login")
#メールアドレスが確認済みである必要がある
ACCOUNT_EMAIL_VERIFICATION = "mandatory"

ご自由にコピペしてお使いください

これで各ページには問題なくアクセスができますが、ユーザーの登録画面で進んでいくと、

と、エラーが、、、

これは登録後に確認メールを自動で送信してくれているのですが、メールの設定がされていないためエラーとなってしまいます

最終的には、メールを送信するよう設定しますが、いちいちメールを送っては確認しても面倒なので、別の方法を次回の記事でご紹介します

ローカル環境ではターミナル上にメールが表示されるよう設定していきましょう!

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

タイトルとURLをコピーしました