django.contrib.auth
このドキュメントは、Djangoの認証システムのコンポーネントのAPIリファレンス資料を提供します。 これらのコンポーネントの使用法または認証と承認をカスタマイズする方法の詳細については、認証トピックガイドを参照してください。
Userモデル
- class models.User
田畑
- class models.User
User オブジェクトには次のフィールドがあります。
- username
必須。 150文字以下。 ユーザー名には、英数字、
_
、@
、+
、.
、および-
文字を含めることができます。max_length
は、多くのユースケースに十分なはずです。 より長い長さが必要な場合は、カスタムユーザーモデルを使用してください。utf8mb4
エンコーディング(適切なUnicodeサポートに推奨)でMySQLを使用する場合、MySQLはデフォルトで191文字の一意のインデックスしか作成できないため、最大でmax_length=191
を指定します。
- first_name
オプション( blank = True )。 150文字以下。
バージョン3.1で変更:
max_length
が30文字から150文字に増加しました。
- last_name
オプション( blank = True )。 150文字以下。
オプション( blank = True )。 電子メールアドレス。
- password
必須。 パスワードのハッシュとメタデータ。 (Djangoは生のパスワードを保存しません。)生のパスワードは任意の長さにすることができ、任意の文字を含めることができます。 パスワードのドキュメントを参照してください。
- groups
グループとの多対多の関係
- user_permissions
許可との多対多の関係
- is_staff
ブール値。 このユーザーが管理サイトにアクセスできるかどうかを指定します。
- is_active
ブール値。 このユーザーアカウントをアクティブと見なすかどうかを指定します。 アカウントを削除するのではなく、このフラグを
False
に設定することをお勧めします。 そうすれば、アプリケーションにユーザーへの外部キーがある場合でも、外部キーが壊れることはありません。これは、ユーザーがログインできるかどうかを必ずしも制御するものではありません。 認証バックエンドは
is_active
フラグをチェックする必要はありませんが、デフォルトのバックエンド( ModelBackend )と RemoteUserBackend はチェックします。 非アクティブなユーザーのログインを許可する場合は、 AllowAllUsersModelBackend または AllowAllUsersRemoteUserBackend を使用できます。 この場合、 LoginView が非アクティブなユーザーを拒否するために使用する AuthenticationForm もカスタマイズする必要があります。 has_perm()などの権限チェックメソッドとDjango管理者の認証はすべて、非アクティブなユーザーに対してFalse
を返すことに注意してください。
- is_superuser
ブール値。 このユーザーが明示的に割り当てずにすべての権限を持っていることを指定します。
- last_login
ユーザーの最後のログインの日時。
- date_joined
アカウントが作成された日時を指定する日時。 アカウントの作成時に、デフォルトで現在の日付/時刻に設定されます。
属性
- class models.User
- is_authenticated
常に
True
である読み取り専用属性(常にFalse
であるAnonymousUser.is_authenticated
とは対照的)。 これは、ユーザーが認証されているかどうかを確認する方法です。 これは、権限を意味するものではなく、ユーザーがアクティブであるか、有効なセッションを持っているかどうかを確認しません。 通常、request.user
でこの属性をチェックして、 AuthenticationMiddleware (現在ログインしているユーザーを表す)によって入力されているかどうかを確認しますが、この属性が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)
指定された生の文字列がユーザーの正しいパスワードである場合、
True
を返します。 (これにより、比較を行う際のパスワードハッシュが処理されます。)
- set_unusable_password()
パスワードが設定されていないことをユーザーにマークします。 これは、パスワードに空白の文字列を使用することと同じではありません。 このユーザーの check_password()は、
True
を返すことはありません。 User オブジェクトを保存しません。アプリケーションの認証がLDAPディレクトリなどの既存の外部ソースに対して行われる場合は、これが必要になることがあります。
- 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)
ユーザーが指定された権限を持っている場合、
True
を返します。ここで、permは"<app label>.<permission codename>"
の形式です。 (権限に関するドキュメントを参照してください)。 ユーザーが非アクティブの場合、このメソッドは常にFalse
を返します。 アクティブなスーパーユーザーの場合、このメソッドは常にTrue
を返します。obj
が渡された場合、このメソッドはモデルのアクセス許可をチェックしませんが、この特定のオブジェクトのアクセス許可をチェックします。
- has_perms(perm_list, obj=None)
ユーザーが指定された各権限を持っている場合、
True
を返します。各権限は、"<app label>.<permission codename>"
の形式です。 ユーザーが非アクティブの場合、このメソッドは常にFalse
を返します。 アクティブなスーパーユーザーの場合、このメソッドは常にTrue
を返します。obj
が渡された場合、このメソッドはモデルの権限ではなく、特定のオブジェクトの権限を確認します。
- has_module_perms(package_name)
ユーザーが指定されたパッケージ(Djangoアプリラベル)で何らかの権限を持っている場合、
True
を返します。 ユーザーが非アクティブの場合、このメソッドは常にFalse
を返します。 アクティブなスーパーユーザーの場合、このメソッドは常にTrue
を返します。
- email_user(subject, message, from_email=None, **kwargs)
ユーザーにメールを送信します。
from_email
がNone
の場合、Djangoは:setting: `DEFAULT_FROM_EMAIL` を使用します。**kwargs
はすべて、基になる send_mail()呼び出しに渡されます。
マネージャーメソッド
- class models.UserManager
User モデルには、( BaseUserManager によって提供されるメソッドに加えて)次のヘルパーメソッドを持つカスタムマネージャーがあります。
- create_user(username, email=None, password=None, **extra_fields)
User を作成、保存、および返します。
ユーザー名とパスワードは指定どおりに設定されます。 email のドメイン部分は自動的に小文字に変換され、返される User オブジェクトの is_active は
True
に設定されます。パスワードが指定されていない場合、 set_unusable_password()が呼び出されます。
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)
"<app label>.<permission codename>"
形式または Permission インスタンスとして指定された権限perm
を持つユーザーを返します。perm
を持つユーザーが見つからない場合は、空のクエリセットを返します。is_active
がTrue
(デフォルト)の場合、アクティブなユーザーのみを返します。False
の場合、非アクティブなユーザーのみを返します。None
を使用して、アクティブ状態に関係なくすべてのユーザーを返します。include_superusers
がTrue
(デフォルト)の場合、結果にはスーパーユーザーが含まれます。backend
が渡され、:setting: `AUTHENTICATION_BACKENDS` で定義されている場合、このメソッドはそれを使用します。 それ以外の場合は、:setting: `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 は、
True
ではなくFalse
です。 - is_staff および is_superuser は常に
False
です。 - is_active は常に
False
です。 - groups および user_permissions は常に空です。
- set_password()、 check_password()、 save()、 delete()は
NotImplementedError
を発生させます。
- id は常に
実際には、おそらく AnonymousUser オブジェクトを自分で使用する必要はありませんが、次のセクションで説明するように、これらはWeb要求によって使用されます。
Permissionモデル
- class models.Permission
田畑
Permission オブジェクトには、次のフィールドがあります。
- class models.Permission
- name
必須。 255文字以下。 例:
'Can vote'
。
- content_type
必須。
django_content_type
データベーステーブルへの参照。これには、インストールされている各モデルのレコードが含まれています。
- codename
必須。 100文字以下。 例:
'can_vote'
。
Groupモデル
- class models.Group
バリデーター
- class validators.ASCIIUsernameValidator
@
、.
、+
、-
、および_
に加えて、ASCII文字と数字のみを許可するフィールドバリデーター。
- class validators.UnicodeUsernameValidator
@
、.
、+
、-
、および_
に加えて、Unicode文字を許可するフィールドバリデーター。User.username
のデフォルトのバリデーター。
ログインおよびログアウト信号
認証フレームワークは、ユーザーがログインまたはログアウトしたときの通知に使用できる次のシグナルを使用します。
- user_logged_in()
ユーザーが正常にログインしたときに送信されます。
このシグナルで送信される引数:
sender
ログインしたばかりのユーザーのクラス。
request
現在の HttpRequest インスタンス。
user
ログインしたばかりのユーザーインスタンス。
- user_logged_out()
- ログアウトメソッドが呼び出されたときに送信されます。
sender
- 上記のように:ログアウトしたばかりのユーザーのクラス、またはユーザーが認証されていない場合は
None
。 request
- 現在の HttpRequest インスタンス。
user
- ログアウトしたばかりのユーザーインスタンス、またはユーザーが認証されていない場合は
None
。
- user_login_failed()
- ユーザーが正常にログインできなかった場合に送信されます
sender
- 認証に使用されるモジュールの名前。
credentials
- authenticate()または独自のカスタム認証バックエンドに渡されたユーザー資格情報を含むキーワード引数の辞書。 一連の「機密」パターンに一致するクレデンシャル(パスワードを含む)は、シグナルの一部として平文で送信されません。
request
- HttpRequest オブジェクト( authenticate()に提供された場合)。
認証バックエンド
このセクションでは、Djangoに付属する認証バックエンドについて詳しく説明します。 それらの使用方法と独自の認証バックエンドの作成方法については、ユーザー認証ガイドのその他の認証ソースセクションを参照してください。
利用可能な認証バックエンド
django.contrib.auth.backends では次のバックエンドを利用できます。
- class BaseBackend
必要なすべてのメソッドのデフォルトの実装を提供する基本クラス。 デフォルトでは、ユーザーを拒否し、権限を提供しません。
- get_user_permissions(user_obj, obj=None)
空のセットを返します。
- get_group_permissions(user_obj, obj=None)
空のセットを返します。
- get_all_permissions(user_obj, obj=None)
get_user_permissions()および get_group_permissions()を使用して、
user_obj
が持つアクセス許可文字列のセットを取得します。
- has_perm(user_obj, perm, obj=None)
get_all_permissions()を使用して、
user_obj
にアクセス許可文字列perm
があるかどうかを確認します。
- 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)
User.check_password を呼び出して、
password
でusername
の認証を試みます。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)
get_all_permissions()を使用して、
user_obj
にアクセス許可文字列perm
があるかどうかを確認します。 ユーザーが is_active でない場合、False
を返します。
- has_module_perms(user_obj, app_label)
user_obj
にアプリapp_label
に対する権限があるかどうかを返します。
- user_can_authenticate()
ユーザーが認証を許可されているかどうかを返します。 が非アクティブなユーザーのへのログインを禁止する AuthenticationForm の動作と一致させるために、このメソッドは is_active = False のユーザーに対して
False
を返します。 is_active フィールドを持たないカスタムユーザーモデルが許可されます。
- with_perm(perm, is_active=True, include_superusers=True, obj=None)
"<app label>.<permission codename>"
または Permission インスタンスのいずれかの形式で権限perm
を持つすべてのアクティブユーザーを返します。perm
を持つユーザーが見つからない場合は、空のクエリセットを返します。is_active
がTrue
(デフォルト)の場合、アクティブなユーザーのみを返します。False
の場合、非アクティブなユーザーのみを返します。None
を使用して、アクティブ状態に関係なくすべてのユーザーを返します。include_superusers
がTrue
(デフォルト)の場合、結果にはスーパーユーザーが含まれます。
- class AllowAllUsersModelBackend
user_can_authenticate()は常に
True
を返すため、非アクティブなユーザーを拒否しないことを除いて、 ModelBackend と同じです。このバックエンドを使用する場合は、[X131X] 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)
username
のクリーニングを実行します(例: LDAP DN情報を削除してから、ユーザーオブジェクトを取得または作成します。 クリーンアップされたユーザー名を返します。
- configure_user(request, user)
新しく作成されたユーザーを構成します。 このメソッドは、新しいユーザーが作成された直後に呼び出され、LDAPディレクトリの属性に基づいてユーザーのグループを設定するなどのカスタムセットアップアクションを実行するために使用できます。 ユーザーオブジェクトを返します。
request
は HttpRequest であり、 authenticate()(バックエンドに渡される)に提供されなかった場合はNone
になる可能性があります。
- user_can_authenticate()
ユーザーが認証を許可されているかどうかを返します。 このメソッドは、 is_active = False のユーザーに対して
False
を返します。 is_active フィールドを持たないカスタムユーザーモデルが許可されます。
- class AllowAllUsersRemoteUserBackend
- user_can_authenticate は常に
True
を返すため、非アクティブなユーザーを拒否しないことを除いて、 RemoteUserBackend と同じです。
ユーティリティ機能
- get_user(request)
指定された
request
のセッションに関連付けられているユーザーモデルインスタンスを返します。セッションに保存されている認証バックエンドが:setting: `AUTHENTICATION_BACKENDS` に存在するかどうかを確認します。 その場合、バックエンドの
get_user()
メソッドを使用してユーザーモデルインスタンスを取得し、ユーザーモデルの get_session_auth_hash()メソッドを呼び出してセッションを検証します。セッションに保存されている認証バックエンドが:setting: `AUTHENTICATION_BACKENDS` にない場合、ユーザーがバックエンドの [によって返されない場合、 AnonymousUser のインスタンスを返します。 X205X]メソッド、またはセッション認証ハッシュが検証されない場合。