Django で認証 (1)
Djangoには最初から認証用の仕組みが付属しているのでそれを有効にしてみる。
http://docs.djangoproject.jp/ja/latest/topics/auth.html
- INSTALLED_APPS 設定に 'django.contrib.auth' と、 'django.contrib.contenttypes' を加えます。
- manage.py syncdb を実行します。
認証用のアプリケーションがあってそれ用のDBを作ってるんだろう、というだけの流れ。 PyCharmでプロジェクトを作成していると最初から有効になっていたので、特に何もしなくていい。 ただこれだけでは認証関係のデータモデルが使えるようになるだけのようだ(多分)
一般的なWebアプリケーションにはこれに加えて以下の要素が必要になるだろう。
- ログイン画面
- ログアウト画面(処理)
- 各画面での認証済みかどうかのチェック
1と2は普通の画面として実装するもののようだ。一応「組み込みビュー」としてあらかじめ用意されている画面もあるので、そちらを使ってもいい。 自分でログインを実装するにはフォームの取り扱いとか知らないといけない。 この辺はまた別のエントリを起こす。
3については単純にアプリケーション側で認証済みかどうかをチェックして、そうでなければログイン画面に飛ばすと言った処理を実装すればいい。これを行うためにはセッションが有効になっていなければならないし、認証機構がセッションと連携できていなければならない。
http://docs.djangoproject.jp/ja/latest/topics/auth.html#web
上記にあるように、 SessionMiddleware
およ び AuthenticationMiddleware
を MIDDLEWARE_CLASSES 設定に追加して有効にしてやる事でこのあたりをやってくれるようになるようだ。上記の解説では結果としてrequest.user
というオブジェクトにアクセスできるようになると書いている。で、この request.user
というオブジェクトの情報を参照して、ログイン済みかどうかチェックする事ができる。
ただそれを簡単にする仕組みとしてデコレータという物があるそうだ。
http://docs.djangoproject.jp/ja/latest/topics/auth.html#login-required
認証をかける必要のあるviewのメソッドに @login_required
をつければ良いらしい。認証済みでなければ勝手にログインページにリダイレクトするようだ。もちろん、ログインページを別途用意しておかなければならない。