09

Django で認証 (1)

Djangoには最初から認証用の仕組みが付属しているのでそれを有効にしてみる。

http://docs.djangoproject.jp/ja/latest/topics/auth.html

  1. INSTALLED_APPS 設定に 'django.contrib.auth' と、 'django.contrib.contenttypes' を加えます。
  2. manage.py syncdb を実行します。

認証用のアプリケーションがあってそれ用のDBを作ってるんだろう、というだけの流れ。 PyCharmでプロジェクトを作成していると最初から有効になっていたので、特に何もしなくていい。 ただこれだけでは認証関係のデータモデルが使えるようになるだけのようだ(多分)

一般的なWebアプリケーションにはこれに加えて以下の要素が必要になるだろう。

  1. ログイン画面
  2. ログアウト画面(処理)
  3. 各画面での認証済みかどうかのチェック

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 をつければ良いらしい。認証済みでなければ勝手にログインページにリダイレクトするようだ。もちろん、ログインページを別途用意しておかなければならない。