Django 1.8にAxesを追加する
連続ログイン失敗時にアカウントをロックする機能を追加できるプラグインdjango-axesのインストール手順です。
環境
- Django 1.8
django-axes のインストール
$ pip install django-axes
settings.pyの編集
vi settings.py
INSTALLED_APPS = (
# 以下の1行を追記
'axes',
)
MIDDLEWARE_CLASSES = (
# 以下の1行を追記
'axes.middleware.FailedLoginMiddleware'
)
# ログイン失敗は連続5回まで
AXES_LOGIN_FAILURE_LIMIT = 5
# ログインを連続失敗した場合は24時間アカウントロック
AXES_COOLOFF_TIME = 24
# AXES_LOGGERはデフォルトでは'axes.watch_login'となっているので、
# ログイン失敗をログ出力するためには、
# 'axes.watch_login'というロガーを作成するか
# 独自のロガーインスタンスにて行う
AXES_LOGGER = 'custom_logger'
urls.pyの編集
vi urls.py
from django.conf.urls import include, url from django.contrib.auth import views as auth_views from axes.decorators import watch_login urlpatterns = [ url(r'^$', hoge_page), url(r'^hoge/', include('hoge.urls')), ... # ログイン画面でwatch_loginデコレータを設定 url(r'^login/$', watch_login(auth_views.login), {'template_name': 'auth/login.html'}, name='login'), ]
templateの編集
vi auth/login.html
<!-- ログインフォームのPOST先URLを以下のように設定 --> <!-- url 'django.contrib.auth.views.login' とするとエラーを吐くので注意 --> <form role="form" method="post" action="{% url 'login' %}?next={{ next }}"> {% csrf_token %} {{ form.non_field_errors }} <div> <input type="text" placeholder="ユーザ名" id="id_username" name="username" maxlength="254" required autofocus> </div> <div> <input type="password" placeholder="パスワード" id="id_password" name="password" required> </div> <input type="submit" value="ログイン"> </form>
マイグレーションの実行
$ ./manage.py migrate
マイグレーションを実行すると、管理サイト内にAxesというAppとAccess attempts, Access logsという項目が表示されます。