django.contrib.auth¶
このドキュメントでは、Django の 認証システムのコンポーネントの API リファレンス資料を提供しています。 これらのコンポーネントの使い方や、認証と認可をカスタマイズする方法の詳細は、認証トピックガイド を参照してください。
User モデル¶
- class models.User¶
フィールド¶
- class models.User
Userオブジェクトには、以下のフィールドがあります:- username¶
必須です。150 文字以下です。英数字のほか、
_、@、+、.、-が使えます。max_lengthは多くの状況で十分のはずです。もしより長い文字数が必要な場合は、独自のユーザモデル を参照してください。utf8mb4エンコーディングで MySQL を使っている場合は (適切な Unicode をサポートするために推奨されています)、最大でもmax_length=191としてください。なぜなら、MySQL は、デフォルトでは 191 文字まででしかユニークインデックスを作成できないからです。
- first_name¶
オプション (
blank=True)。150 文字以下。
- last_name¶
オプション (
blank=True)。150 文字以下。
- email¶
オプション (
blank=True)。メールアドレス。
- password¶
必須。パスワードのハッシュとメタデータです。(Djangoは生のパスワードを保存しません。)生のパスワードは任意の長さにでき、任意の文字を含むことができます。このフィールドのメタデータは、パスワードが使用不可であることを示すことがあります。詳細については、パスワードに関するドキュメント を参照してください。
- user_permissions¶
Permissionへの多対多のリレーションシップです。
- is_staff¶
真偽値。このユーザに管理サイトへのアクセスを許可します。
- is_active¶
ブール値。このユーザーアカウントをアクティブとしてマークします。アカウントを削除する代わりに、このフラグを
Falseに設定することを推奨します。そうすれば、アプリケーションにユーザーへの外部キーがある場合でも、外部キーが壊れることはありません。この属性は、必ずしもユーザがログインできるかどうかをコントロールするわけではありません。認証バックエンドは必ずしも
is_activeフラグをチェックしませんが、デフォルトのバックエンド (ModelBackend) とRemoteUserBackendはチェックを行います。非アクティブのユーザがログインできるようにしたい場合は、AllowAllUsersModelBackendやAllowAllUsersRemoteUserBackendを使うことができます。この場合、非アクティブのユーザを拒否してしまうので、LoginViewによって使われるAuthenticationFormもカスタマイズした方が良いでしょう。has_perm()のようなパーミッションチェックのメソッドや Django admin 内の認証はすべて非アクティブユーザに対してFalseを返すことに注意してください。
- is_superuser¶
真偽値。このユーザには特にパーミッションを割り当てずに、すべてのパーミッションを持つものとして扱います。
- last_login¶
ユーザーが最後にログインした日時です。
- date_joined¶
アカウントが作成された日時。
属性¶
- class models.User
- is_authenticated¶
(
AnonymousUser.is_authenticatedが常にFalseなのとは対照的に) 常にTrueの読み取り専用属性です。ユーザが認証済みかどうかを知らせる方法です。これはパーミッションという意味ではなく、ユーザーがアクティブかどうか、また有効なセッションがあるかどうかをチェックするわけでもありません。 通常、request.userのこの属性をチェックしてAuthenticationMiddleware(現在ログイン中のユーザを表します) によって格納されているかどうかを調べます。Userのインスタンスの場合、この属性はTrueとなります。
- is_anonymous¶
常に
Falseの読み取り専用属性です。UserオブジェクトとAnonymousUserオブジェクトを区別する方法です。一般的に、is_authenticatedを使う方が好ましいと言えます。
メソッド¶
- class models.User
- get_username()¶
ユーザのユーザ名を返します。
Userモデルはスワップアウトされることがあるので、ユーザ名を直接参照する代わりにこのメソッドを使う必要があります。
- get_full_name()¶
first_nameとlast_nameをスペースでつないだ文字列を返します。
- get_short_name()¶
first_nameを返します。
- set_password(raw_password)¶
指定された生の文字列に、ユーザのパスワードをセットし、パスワードのハッシュ処理を行います。
Userは保存しません。raw_passwordがNoneのとき、set_unusable_password()が使われるのと同じように、パスワードは使用に適さないパスワードになります。
- check_password(raw_password)¶
- acheck_password(raw_password)¶
非同期バージョン:
acheck_password()与えられた生の文字列が、ユーザに対して正しいパスワードであれば
Trueを返します。 (比較する際にはパスワードハッシュを処理します。)Changed in Django 5.0:acheck_password()メソッドが追加されました。
- set_unusable_password()¶
ユーザーのパスワードが設定されていないことを示すために、
passwordフィールドのメタデータを更新します。これは、パスワードが空の文字列であることとは異なります。このユーザーに対してcheck_password()を呼び出しても、決してTrueを返しません。このメソッドはUserオブジェクトを保存しません。アプリケーションの認証が LDAP ディレクトリなどの既存の外部ソースに対して行われている場合は、これが必要になることがあります。
パスワードリセットの制限
使用できないパスワードを持つユーザーは、
PasswordResetViewを通じてパスワードリセットのメールをリクエストすることができません。
- has_usable_password()¶
ユーザに対して
set_unusable_password()が呼ばれている場合、Falseを返します。
- get_user_permissions(obj=None)¶
ユーザーが直接持っているパーミッション文字列のセットを返します。
もし
objが渡された場合、この特定のオブジェクトのユーザパーミッションのみを返します。
- get_group_permissions(obj=None)¶
ユーザがグループを通して持つパーミッションの文字列のセットを返します。
objが渡されたとき、指定されたオブジェクトに対するグループパーミッションのみを返します。
- get_all_permissions(obj=None)¶
ユーザがグループおよびユーザパーミッションを通して持つパーミッションの文字列のセットを返します。
objが渡された場合、指定されたオブジェクトに対するパーミッションのみを返します。
- has_perm(perm, obj=None)¶
perm が
"<app label>.<permission codename>"という形式で、ユーザーが特定の権限を持っている場合、Trueを返します (詳しくは パーミッション のドキュメントを参照)。もしユーザーが非アクティブの場合、このメソッドは常にFalseを返します。アクティブなスーパーユーザーの場合、このメソッドは常にTrueを返します。objが渡された場合、このメソッドは指定されたオブジェクトに対してパーミッションのチェックを行い、モデルに対しては行いません。
- has_perms(perm_list, obj=None)¶
指定された権限を持つかどうかを判定し、持つ場合は
Trueを返します。各 perm は"<app label>.<permission codename>"の形式です。ユーザーが非アクティブの場合、このメソッドは常にFalseを返します。アクティブなスーパーユーザーの場合、このメソッドは常にTrueを返します。objが渡された場合、このメソッドは指定されたオブジェクトに対してパーミッションのチェックを行い、モデルに対しては行いません。
- has_module_perms(package_name)¶
与えられたパッケージ (Djangoアプリのラベル) 内でユーザーが何らかの権限を持っている場合、
Trueを返します。ユーザーが非アクティブな場合、このメソッドは常にFalseを返します。アクティブなスーパーユーザーの場合、このメソッドは常にTrueを返します。
- email_user(subject, message, from_email=None, **kwargs)¶
ユーザに E メールを送信します。
from_emailがNoneの場合、Django はDEFAULT_FROM_EMAILを使用します。全ての**kwargsは元となるsend_mail()呼び出しに渡されます。
マネージャメソッド¶
- class models.UserManager¶
Userモデルは、(BaseUserManagerで提供されるメソッドに加えて) 以下のヘルパーメソッドを有する独自のマネージャを持っています:- create_user(username, email=None, password=None, **extra_fields)¶
Userを作成、保存して返します。usernameとpasswordは指定された通りに設定されます。emailのドメイン部分は自動的に小文字に変換され、返されるUserオブジェクトにはis_activeがTrueに設定されます。パスワードが指定されなかった場合、
set_unusable_password()が呼び出されます。If no email is provided,
emailwill be set to an empty string.extra_fieldsキーワード引数は、Userクラスの__init__メソッドに渡され、カスタムユーザーモデル に任意のフィールドを設定することを可能にします。使用例については ユーザーの作成 を参照してください。
- create_superuser(username, email=None, password=None, **extra_fields)¶
create_user()と同じですが、is_staffとis_superuserをTrueにセットします。
- with_perm(perm, is_active=True, include_superusers=True, backend=None, obj=None)¶
与えられたパーミッション
permを持つユーザを"<app label>.<permission codename>"形式、またはPermissionインスタンスで返します。もしpermを持つユーザが見つからなかった場合、空のクエリセットを返します。is_activeがTrue(デフォルト) の場合、アクティブなユーザーのみを返し、Falseの場合、非アクティブなユーザーのみを返します。アクティブ状態に関わらずすべてのユーザーを返すにはNoneを使用してください。include_superusersがTrue(デフォルト) の場合、結果にはスーパーユーザーが含まれます。もし
backendが渡され、それがAUTHENTICATION_BACKENDSで定義されている場合、このメソッドはそれを使用します。そうでない場合、1つだけならばAUTHENTICATION_BACKENDS内のbackendを使用し、複数ある場合は例外を発生させます。
AnonymousUser オブジェクト¶
- class models.AnonymousUser¶
django.contrib.auth.models.AnonymousUserは、django.contrib.auth.models.Userインターフェースを実装するクラスで、以下の点が異なります。id が常に
Noneです。usernameが常に空の文字列です。get_username()が常に空の文字列を返します。is_anonymousがFalseではなくTrueです。is_authenticatedがFalseではなくTrueです。is_staffとis_superuserが常にFalseです。is_activeが常にFalseです。groupsとuser_permissionsが常に空です。set_password()、check_password()、save()、delete()がNotImplementedErrorを投げます。
実際には AnonymousUser オブジェクトを使う必要はないでしょうが、次のセクションで説明するように、Web リクエストで使用されます。
Permission モデル¶
- class models.Permission¶
フィールド¶
Permission オブジェクトには以下のフィールドがあります:
メソッド¶
他のあらゆる Django モデル と同じように、 Permission オブジェクトも標準的なデータアクセスのメソッドが使えます。
Group モデル¶
- class models.Group¶
フィールド¶
Group オブジェクトには以下のフィールドがあります:
- class models.Group
- name¶
必須。150文字以下。任意の文字が使用可能。例:
'Awesome Users'。
- permissions¶
Permissionへの多対多のフィールドです:group.permissions.set([permission_list]) group.permissions.add(permission, permission, ...) group.permissions.remove(permission, permission, ...) group.permissions.clear()
バリデータ (Validator)¶
- class validators.ASCIIUsernameValidator¶
ASCII 文字と数字、さらに
@、.、+、-、_のみを許可するフィールドバリデータ。
- class validators.UnicodeUsernameValidator¶
Unicode 文字を許可するフィールドバリデータで、
@、.、+、-、_に加えて指定された文字も許可します。User.usernameのデフォルトのバリデータです。
ログインとログアウトのシグナル¶
認証フレームワークは、ユーザーがログインやログアウトをしたときの通知に使うことができる、以下の シグナル を使用します。
- user_logged_in¶
ユーザがログインに成功したときに送信されます。
このシグナルとともに送信される引数は以下の通りです:
senderたった今ログインしたユーザのクラスです。
request現在の
HttpRequestインスタンスです。userたった今ログインしたユーザのインスタンスです。
- user_logged_out¶
logout メソッドが呼ばれたときに送信されます。
sender上記の通り: たった今ログアウトしたユーザのクラス、もしくはユーザが認証されなかった場合は
Noneとなります。request現在の
HttpRequestインスタンスです。userたった今ログアウトしたユーザのインスタンスか、ユーザが認証されなかった場合は
Noneです。
- user_login_failed¶
ユーザがログインに失敗したときに送信されます。
sender認証のために使われるモジュールの名前です。
credentialsauthenticate()か独自の認証バックエンドに渡されたユーザ資格情報を含む、キーワード引数のディクショナリです。'sensitive' パターンのセットに一致する (パスワードを含んだ) 資格情報は、シグナルの一部として明確には送信されません。requestauthenticate()に提供されている場合、HttpRequestオブジェクト。
認証のバックエンド¶
このセクションでは、Django に付属する認証バックエンドについて詳しく説明します。 使用方法と独自の認証バックエンドの作成方法については、ユーザ認証ガイド の 他の認証ソースのセクション を参照してください。
利用可能な認証バックエンド¶
以下のバックエンドが django.contrib.auth.backends 内で利用可能です:
- class BaseBackend[ソース]¶
すべての必須メソッドのデフォルト実装を提供する基底クラス。デフォルトでは、ユーザーを拒否し、パーミッションを提供しません。
- get_all_permissions(user_obj, obj=None)[ソース]¶
user_objが持つ権限文字列のセットを取得するには、get_user_permissions()およびget_group_permissions()を使用します。
- has_perm(user_obj, perm, obj=None)[ソース]¶
user_objが権限文字列permを持っているかどうかを確認するには、get_all_permissions()メソッドを使用します。
- class ModelBackend[ソース]¶
これは Django が使うデフォルトの認証バックエンドです。ユーザ識別子とパスワードからなる認証情報を使って認証します。Django のデフォルトのユーザモデルでは、ユーザ識別子はユーザ名で、カスタムユーザモデルでは USERNAME_FIELD で指定されたフィールドです (ユーザと認証のカスタマイズ を参照してください)。
また、
UserとPermissionsMixinで定義されているデフォルトのパーミッションモデルも扱います。has_perm()、get_all_permissions()、get_user_permissions()、 およびget_group_permissions()メソッドは、特定のオブジェクトの権限を扱うためにオブジェクトをパラメータとして受け取ることができますが、このバックエンドは、obj is not Noneの場合に、権限の空セットを返す以外は実装されていません。with_perm()もオブジェクトを引数として渡すことができますが、他のメソッドと異なり、obj is not Noneの場合は空のクエリセットを返します。- authenticate(request, username=None, password=None, **kwargs)[ソース]¶
usernameとpasswordを用いて、User.check_passwordを呼び出すことで認証を試みます。もしusernameが指定されていない場合、CustomUser.USERNAME_FIELDキーを使用してkwargsからユーザー名を取得しようとします。認証されたユーザーを返すか、Noneを返します。requestはHttpRequestで、authenticate()が提供されていない場合Noneとなる可能性があります。(バックエンドでこれを通過するため).
- get_user_permissions(user_obj, obj=None)[ソース]¶
user_objが持つユーザー権限から許可文字列のセットを返します。is_anonymousまたはis_activeがFalseの場合は空のセットが返されます。
- get_group_permissions(user_obj, obj=None)[ソース]¶
ユーザーが所属するグループの権限から
user_objが持つ権限文字列のセットを返します。もしis_anonymousやis_activeがFalseの場合は空のセットを返します。
- get_all_permissions(user_obj, obj=None)[ソース]¶
user_objが持つユーザーパーミッションとグループパーミッションを含むパーミッション文字列のセットを返します。もしis_anonymousまたはis_activeがFalseの場合は空のセットを返します。
- has_perm(user_obj, perm, obj=None)[ソース]¶
user_objが権限文字列permを持っているかをチェックするには、get_all_permissions()を使用します。user_objがis_activeでない場合は、Falseを返します。
- user_can_authenticate()[ソース]¶
ユーザーが認証を許可されているかどうかを返します。
非アクティブなユーザーのログインを禁止するAuthenticationFormの動作に合わせるため、このメソッドはis_active=Falseを持つユーザーに対してFalseを返します。is_activeフィールドを持たないカスタムユーザーモデルは許可されます。
- with_perm(perm, is_active=True, include_superusers=True, obj=None)[ソース]¶
パーミッション
permを持つ全てのアクティブユーザを"<app label>.<permission codename>"形式、またはPermissionインスタンスで返します。もしpermを持つユーザが見つからなかった場合、空のクエリセットを返します。is_activeがTrue(デフォルト) の場合、アクティブなユーザーのみを返し、Falseの場合、非アクティブなユーザーのみを返します。アクティブ状態に関わらずすべてのユーザーを返すにはNoneを使用してください。include_superusersがTrue(デフォルト) の場合、結果にはスーパーユーザーが含まれます。
- class AllowAllUsersModelBackend[ソース]¶
ModelBackendと同様ですが、user_can_authenticate()は常にTrueを返すため、非アクティブなユーザーを拒否しません。このバックエンドを使用する際は、おそらく、
LoginViewで使用されるAuthenticationFormクラスをカスタマイズしたいと思うでしょう。非アクティブなユーザーを拒否するconfirm_login_allowed()メソッドをオーバーライドすることが推奨されます。
- class RemoteUserBackend[ソース]¶
このバックエンドを使用して、Django 以外で処理される外部認証を利用します。これは、
request.META['REMOTE_USER']に渡されたユーザ名を使用して認証を行います。詳細は、 REMOTE_USER を使った認証方法 のドキュメントを参照してください。もしより細かな制御が必要な場合は、このクラスを継承した独自の認証バックエンドを作成し、これらの属性やメソッドをオーバーライドできます。
- create_unknown_user¶
TrueまたはFalse。データベースにユーザーオブジェクトが存在しない場合に、作成するかどうかを決定します。 デフォルトはTrueです。
- authenticate(request, remote_user)[ソース]¶
渡された
remote_userというユーザー名は信頼されたものとして扱われます。このメソッドは、指定されたユーザー名のユーザーオブジェクトを返し、create_unknown_userがTrueの場合は新しいユーザーオブジェクトを作成します。create_unknown_userがFalseであり、指定されたユーザー名のUserオブジェクトがデータベースに見つからない場合、Noneを返します。requestはHttpRequestで、authenticate()が提供されていない場合Noneとなる可能性があります。(バックエンドでこれを通過するため).
- clean_username(username)[ソース]¶
ユーザー名の使用前に (LDAP DN 情報を取り除くなど)
usernameに対して任意のクリーニングを実行します。クリーニングされたユーザー名を返します。
- configure_user(request, user, created=True)[ソース]¶
認証を試みるたびにユーザを設定します。このメソッドは、認証対象のユーザを取得または作成した直後にコールされ、 LDAP ディレクトリの属性に基づいてユーザのグループを設定するなどのカスタム設定アクションを実行するために使用できます。ユーザオブジェクトを返します。
この設定は、リモートとローカルのシステム間で属性を同期させる方法として、ユーザーの作成時に一度だけ実行することもできますし (
createdはTrue)、既存のユーザーに対して実行することもできます (createdはFalse)。requestはHttpRequestで、authenticate()が提供されていない場合Noneとなる可能性があります。(バックエンドでこれを通過するため).
- user_can_authenticate()¶
ユーザが認証を許可されているかどうかを返します。このメソッドは
is_active=Falseを持つユーザに対してFalseを返します。is_activeフィールドを持たないカスタムユーザモデルは許可されます。
- class AllowAllUsersRemoteUserBackend[ソース]¶
RemoteUserBackendと同じですが、user_can_authenticateは常にTrueを返すため、非アクティブなユーザを拒否しない点が異なります。
ユーティリティ関数¶
- aget_user(request)¶
非同期バージョン:
aget_user()与えられた
requestのセッションに関連付けられたユーザモデルのインスタンスを返します。セッションに保存されている認証バックエンドが
AUTHENTICATION_BACKENDSに存在するかどうかをチェックします。もし存在すれば、バックエンドのget_user()メソッドを使ってユーザーモデルのインスタンスを取得し、ユーザーモデルのget_session_auth_hash()メソッドを呼び出してセッションを検証します。検証に失敗し、SECRET_KEY_FALLBACKSが指定された場合、get_session_auth_fallback_hash()メソッドを使用して各フォールバックキーに対してセッションを検証します。セッションに保存されている認証バックエンドが
AUTHENTICATION_BACKENDSにない場合、バックエンドのget_user()メソッドでユーザが返されない場合、またはセッションの認証ハッシュが検証されない場合、AnonymousUserのインスタンスを返します。Changed in Django 5.0:aget_user()関数が追加されました。