Django allauthまとめ

allauth

予約管理サイト作成の第1段階として、ユーザー認証機能を実装したのでメモ

ブログやYTを見よう見まねでコピペして実装できたものの、何がどうなっているかまるで分らず気持ち悪いので、認証まわりは少し時間をかけて勉強してみよう。

allauth 導入マニュアルはコチラ

英語で書かれていますが、直観的にコピペできるように編集されています。

settings.pyに記述した allauth とは

django-allauth の機能一覧

  1. ログイン
  2. ログアウト
  3. パスワード変更
  4. パスワード再設定メール送信・完了
  5. パスワード再設定・完了
  6. ユーザ登録
  7. ユーザ登録確認メール送信・完了
  8. メアド登録・削除

context_processors を追記(settings.py)

=> テンプレート上で変数を扱えるようにする。

=>認証バックエンドを設定する。ログイン成功時のリダイレクト先など、画面の遷移先を明示する。

より詳細設定がしたい方はコチラ(django-allauth Documentationより)

ログイン試行回数設定も簡単に出来る!

ACCOUNT_LOGIN_ATTEMPTS_LIMIT (=5)Number of failed login attempts. When this number is exceeded, the user is prohibited from logging in for the specified ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT seconds. Set to None to disable this functionality. Important: while this protects the allauth login view, it does not protect Django’s admin login from being brute forced.

上記リンクの抜粋

サインアップ時にパスワードを2回入力させる設定です。このほか、SNSログイン設定も掲載されている。

ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE (=True)When signing up, let the user type in their password twice to avoid typos.

上記リンクの抜粋

urls.py の設定

=> インストール後、マイグレートしておく

=>  ログイン画面からの遷移先画面(html)作成

※パスワード変更画面作成の場合は、「変更画面」と「変更完了画面」を追加する

※「ログインできない場合(パスワード再設定)」の画面は、今回は設置していない

views.py設定

パスワードやメール等、より詳細設定がしたい方はコチラ

forms.py作成

デフォルトのフォームはコチラ(パスワード変更や再設定フォームなども、デフォルトで設置されています。)

templatesを簡単に上書きできる

The view corresponding to the account_login URL uses the template account/login.html. If you create a file with this name in your code layout, it can override the one shipped with allauth.

https://django-allauth.readthedocs.io/en/latest/templates.html account_login URLに対応するビューは、テンプレートaccount /login.htmlを使用しているので、この名前のファイルを作成すると、allauthに付属しているファイルを上書きできる。

そこで、もともとのhtmlのコードをgithub上で確認してみると、至れり尽くせりのテンプレートの数々が準備されている。神業です。。。

追記:デコレータ

サインアップ時にメアド確認が必須ではない場合でも、未確認のユーザーが続行できないようにしたい場合は、「デコレータ」というものが使えるみたいだ。

from allauth.account.decorators import verified_email_required

@verified_email_required
def verified_users_only_view(request):
    ...

上記赤文字部分を、コードに追加するだけで、簡易的にメアド入力を求める事もできる。

寄り道:「i18n」とは

先ほど、django-allauth のgithub上のテンプレートコードを見ていた時に見つけた「i18n」が気になったので調べてみる

直訳(?)すると「国際化」という事で、ブラウザを開く環境(言語・日付設定等)に合わせて、訳してくれたりするみたいだ。こちらのサイトが分かりやすかったので、私もぼちぼち勉強しよう!

「i18n」公式ドキュメントはコチラ

おすすめ記事