Django でのユーザー認証

Django はユーザー認証システムを搭載しています。ユーザーアカウント、グループ、パーミッション、そしてCookieベースのユーザーセッションを制御します。このドキュメントのこのセクションでは、デフォルトの実装がどう機能するか、またあなたのプロジェクトのニーズに対応させるための 拡張とカスタマイズ の方法を説明しています。

概要

Django の認証システムは、認証と権限の両方を扱います。簡単に言うと、認証はユーザーが誰であるかを立証し、権限は立証されたユーザーが何をすることが許されているかを決定します。ここでは、認証という用語は両方のタスクを指すために使われます。

認証システムを構成するものは以下の通りです:

  • ユーザ
  • パーミッション: ユーザが特定のタスクを実行できるかどうかを指定するバイナリ (yes/no) フラグ
  • グループ: 複数のユーザーにラベルとパーミッションを付与する一般的な方法
  • 設定変更可能なパスワードハッシュシステム
  • ユーザーログインのためのフォームやビューツール、もしくは内容の制限
  • プラガブルなバックエンドシステム

Django の認証システムは一般的であることを狙いとしており、ウェブ上の認証システムで見られるようないくつかの機能を有していません。これらに共通する問題の解決策は、サードパーティのパッケージにて実装されます。

  • パスワード強度のチェック
  • ログイン試行数の制限
  • サードパーティに対する認証 (OAuthなど)
  • Object-level permissions

インストール

認証関連をサポートする仕組みは、 django.contrib.auth 内の Django contrib モジュールとしてバンドルされています。デフォルトでは、必要な設定は django-admin startproject で生成される settings.py にすでに記述されています。これらは、あなたの INSTALLED_APPS に記述される 2 つの項目により構成されています:

  1. 'django.contrib.auth' は、認証フレームワークおよびそのデフォルトのモデルの中心機能を含みます。
  2. 'django.contrib.contenttypes' は Django content type system です。パーミッションをあなたが作成したモデルと紐付けられるようにします。

そして、あなたの MIDDLEWARE 内にある以下の項目です:

  1. SessionMiddleware は、リクエストを横断する sessions を管理します。
  2. AuthenticationMiddleware は、ユーザとセッションを使用リクエストを紐付けます。

With these settings in place, running the command manage.py migrate creates the necessary database tables for auth related models and permissions for any models defined in your installed apps.