django.contrib.auth¶
このドキュメントでは、Django の 認証システムのコンポーネントの API リファレンス資料を提供しています。 これらのコンポーネントの使い方や、認証と承認をカスタマイズする方法の詳細は、 認証トピックガイド を参照してください。
User モデル¶
フィールド¶
-
class
models.User¶ Userオブジェクトには、以下のフィールドがあります:-
username¶ 必須です。150 文字以下です。英数字のほか、
_、@、+、.、-が使えます。max_lengthは多くの状況で十分のはずです。もしより長い文字数が必要な場合は、独自のユーザモデル を参照してください。utf8mb4エンコーディングで MySQL を使っている場合は (適切な Unicode をサポートするために推奨されています)、最大でもmax_length=191としてください。なぜなら、MySQL は、でおフォルトでは 191 文字まででしかユニークインデックスを作成できないからです。ユーザ名と Unicode
Django originally accepted only ASCII letters and numbers in usernames. Although it wasn't a deliberate choice, Unicode characters have always been accepted when using Python 3. Django 1.10 officially added Unicode support in usernames, keeping the ASCII-only behavior on Python 2, with the option to customize the behavior using
User.username_validator.
-
first_name¶ Optional (
blank=True). 30 characters or fewer.
-
last_name¶ Optional (
blank=True). 150 characters or fewer.Changed in Django 2.0:max_lengthは 30 文字から 150 文字に引き上げられました。
-
email¶ Optional (
blank=True). Email address.
-
password¶ 必須です。パスワードのハッシュであり、パスワードについてのメタデータでもあります。(Django は生のパスワードを保管しません。) 生のパスワードは、任意の長さで、あらゆる文字を使用可能です。詳しくは password documentation を参照してください。
-
user_permissions¶ Permissionへの多対多のリレーションシップです。
-
is_staff¶ 真偽値です。ユーザが admin サイトにアクセスできるかどうかを指定します。
-
is_active¶ 真偽値です。 このユーザアカウントをアクティブと見なすかどうかを指定します。 アカウントを削除するのではなく、このフラグを
Falseに設定することをお勧めします。 そうすれば、アプリケーションに外部キーがある場合でも、外部キーが破損しません。This doesn't necessarily control whether or not the user can log in. Authentication backends aren't required to check for the
is_activeflag but the default backend (ModelBackend) and theRemoteUserBackenddo. You can useAllowAllUsersModelBackendorAllowAllUsersRemoteUserBackendif you want to allow inactive users to login. In this case, you'll also want to customize theAuthenticationFormused by theLoginViewas it rejects inactive users. Be aware that the permission-checking methods such ashas_perm()and the authentication in the Django admin all returnFalsefor inactive users.
-
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を使う方が好ましいと言えます。
-
username_validator¶ Points to a validator instance used to validate usernames. Defaults to
validators.UnicodeUsernameValidator.To change the default username validator, you can subclass the
Usermodel and set this attribute to a different validator instance. For example, to use ASCII usernames:from django.contrib.auth.models import User from django.contrib.auth.validators import ASCIIUsernameValidator class CustomUser(User): username_validator = ASCIIUsernameValidator() class Meta: proxy = True # If no new field is added.
-
メソッド¶
-
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を返します。Changed in Django 2.1:In older versions, this also returns
Falseif the password isNoneor an empty string, or if the password uses a hasher that's not in thePASSWORD_HASHERSsetting. That behavior is considered a bug as it prevents users with such passwords from requesting a password reset.
-
get_group_permissions(obj=None)¶ ユーザがグループを通して持つパーミッションの文字列のセットを返します。
objが渡されたとき、指定されたオブジェクトに対するグループパーミッションのみを返します。
-
get_all_permissions(obj=None)¶ ユーザがグループおよびユーザパーミッションを通して持つパーミッションの文字列のセットを返します。
objが渡された場合、指定されたオブジェクトに対するパーミッションのみを返します。
-
has_perm(perm, obj=None)¶ ユーザが指定されたパーミッションを持っている場合、
Trueを返します。perm は"<app label>.<permission codename>"形式です。(permissions のドキュメントを参照)。ユーザが非アクティブの場合、このメソッドは常にFalseを返します。objが渡された場合、このメソッドは指定されたオブジェクトに対してパーミッションのチェックを行い、モデルに対しては行いません。
-
has_perms(perm_list, obj=None)¶ ユーザが指定されたそれぞれのパーミッションを持っている場合、
Trueを返します。各パーミッションは"<app label>.<permission codename>"形式です。ユーザが非アクティブの場合、このメソッドは常にFalseを返します。objが渡された場合、このメソッドは指定されたオブジェクトに対してパーミッションのチェックを行い、モデルに対しては行いません。
-
has_module_perms(package_name)¶ ユーザが指定されたパッケージ (Django のアプリケーションラベル)内の全パーミッションを持っている場合、
Trueを返します。ユーザが非アクティブの場合、このメソッドは常にFalseを返します。
-
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を作成、保存して返します。The
usernameandpasswordare set as given. The domain portion ofemailis automatically converted to lowercase, and the returnedUserobject will haveis_activeset toTrue.If no password is provided,
set_unusable_password()will be called.The
extra_fieldskeyword arguments are passed through to theUser’s__init__method to allow setting arbitrary fields on a custom user model.See Creating users for example usage.
-
create_superuser(username, email, password, **extra_fields)¶ create_user()と同じですが、is_staffとis_superuserをTrueにセットします。
-
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を投げます。
- id が常に
実際には、AnonymousUser オブジェクトを自分自身で使う必要はないかもしれませんが、次のセクションで説明するように、Web リクエストで使用されます。
Permission モデル¶
-
class
models.Permission¶
フィールド¶
Permission オブジェクトには以下のフィールドがあります:
メソッド¶
他のあらゆる Django モデル と同じように、Permission オブジェクトも標準的なデータアクセスのメソッドが使えます。
Group モデル¶
-
class
models.Group¶
フィールド¶
Group オブジェクトには以下のフィールドがあります:
-
class
models.Group -
name¶ 必須です。80以下です。あらゆる文字列が使えます。例:
'Awesome Users'。
-
permissions¶ Permissionへの多対多のフィールドです:group.permissions.set([permission_list]) group.permissions.add(permission, permission, ...) group.permissions.remove(permission, permission, ...) group.permissions.clear()
-
バリデータ¶
-
class
validators.ASCIIUsernameValidator¶ A field validator allowing only ASCII letters and numbers, in addition to
@,.,+,-, and_.
-
class
validators.UnicodeUsernameValidator¶ A field validator allowing Unicode characters, in addition to
@,.,+,-, and_. The default validator forUser.username.
ログインとログアウトのシグナル¶
認証フレームワークは、ユーザーがログインやログアウトをしたときの通知に使うことができる、以下の signals を使用します。
-
user_logged_in()¶ ユーザがログインに成功したときに送信されます。
このシグナルとともに送信される引数は以下の通りです:
sender- たった今ログインしたユーザのクラスです。
request- 現在の
HttpRequestインスタンスです。 user- たった今ログインしたユーザのインスタンスです。
-
user_logged_out()¶ logout メソッドが呼ばれたときに送信されます。
sender- 上記の通り: たった今ログアウトしたユーザのクラス、もしくはユーザが認証されなかった場合は
Noneとなります。 request- 現在の
HttpRequestインスタンスです。 user- たった今ログアウトしたユーザのインスタンスか、ユーザが認証されなかった場合は ``None``です。
-
user_login_failed()¶ ユーザがログインに失敗したときに送信されます。
sender- 認証のために使われるモジュールの名前です。
credentialsauthenticate()か独自の認証バックエンドに渡されたユーザ資格情報を含む、キーワード引数のディクショナリです。'sensitive' パターンのセットに一致する (パスワードを含んだ) 資格情報は、シグナルの一部として明確には送信されません。request- The
HttpRequestobject, if one was provided toauthenticate().
認証のバックエンド¶
このセクションでは、Django に付属する認証バックエンドについて詳しく説明します。 使用方法と独自の認証バックエンドの作成方法については、ユーザ認証ガイド の 他の認証ソースのセクション を参照してください。
利用可能な認証バックエンド¶
以下のバックエンドが django.contrib.auth.backends 内で利用可能です:
-
class
ModelBackend¶ This is the default authentication backend used by Django. It authenticates using credentials consisting of a user identifier and password. For Django's default user model, the user identifier is the username, for custom user models it is the field specified by USERNAME_FIELD (see Customizing Users and authentication).
It also handles the default permissions model as defined for
UserandPermissionsMixin.has_perm(),get_all_permissions(),get_user_permissions(), andget_group_permissions()allow an object to be passed as a parameter for object-specific permissions, but this backend does not implement them other than returning an empty set of permissions ifobj is not None.-
authenticate(request, username=None, password=None, **kwargs)¶ Tries to authenticate
usernamewithpasswordby callingUser.check_password. If nousernameis provided, it tries to fetch a username fromkwargsusing the keyCustomUser.USERNAME_FIELD. Returns an authenticated user orNone.requestはHttpRequestで、authenticate()が提供されていない場合Noneとなる可能性があります。(バックエンドでこれを通過するため).
-
get_user_permissions(user_obj, obj=None)¶ Returns the set of permission strings the
user_objhas from their own user permissions. Returns an empty set ifis_anonymousoris_activeisFalse.
-
get_group_permissions(user_obj, obj=None)¶ Returns the set of permission strings the
user_objhas from the permissions of the groups they belong. Returns an empty set ifis_anonymousoris_activeisFalse.
-
get_all_permissions(user_obj, obj=None)¶ Returns the set of permission strings the
user_objhas, including both user permissions and group permissions. Returns an empty set ifis_anonymousoris_activeisFalse.
-
has_perm(user_obj, perm, obj=None)¶ Uses
get_all_permissions()to check ifuser_objhas the permission stringperm. ReturnsFalseif the user is notis_active.
-
has_module_perms(user_obj, app_label)¶ Returns whether the
user_objhas any permissions on the appapp_label.
-
user_can_authenticate()¶ Returns whether the user is allowed to authenticate. To match the behavior of
AuthenticationFormwhichprohibits inactive users from logging in, this method returnsFalsefor users withis_active=False. Custom user models that don't have anis_activefield are allowed.
-
-
class
AllowAllUsersModelBackend¶ Same as
ModelBackendexcept that it doesn't reject inactive users becauseuser_can_authenticate()always returnsTrue.When using this backend, you'll likely want to customize the
AuthenticationFormused by theLoginViewby overriding theconfirm_login_allowed()method as it rejects inactive users.
-
class
RemoteUserBackend¶ Use this backend to take advantage of external-to-Django-handled authentication. It authenticates using usernames passed in
request.META['REMOTE_USER']. See the Authenticating against REMOTE_USER documentation.If you need more control, you can create your own authentication backend that inherits from this class and override these attributes or methods:
-
create_unknown_user¶ TrueorFalse. Determines whether or not a user object is created if not already in the database Defaults toTrue.
-
authenticate(request, remote_user)¶ The username passed as
remote_useris considered trusted. This method simply returns the user object with the given username, creating a new user object ifcreate_unknown_userisTrue.Returns
Noneifcreate_unknown_userisFalseand aUserobject with the given username is not found in the database.requestはHttpRequestで、authenticate()が提供されていない場合Noneとなる可能性があります。(バックエンドでこれを通過するため).
-
clean_username(username)¶ Performs any cleaning on the
username(e.g. stripping LDAP DN information) prior to using it to get or create a user object. Returns the cleaned username.
-
configure_user(user)¶ Configures a newly created user. This method is called immediately after a new user is created, and can be used to perform custom setup actions, such as setting the user's groups based on attributes in an LDAP directory. Returns the user object.
-
user_can_authenticate()¶ Returns whether the user is allowed to authenticate. This method returns
Falsefor users withis_active=False. Custom user models that don't have anis_activefield are allowed.
-
-
class
AllowAllUsersRemoteUserBackend¶ Same as
RemoteUserBackendexcept that it doesn't reject inactive users becauseuser_can_authenticatealways returnsTrue.
Utility functions¶
-
get_user(request)[ソース]¶ Returns the user model instance associated with the given
request’s session.It checks if the authentication backend stored in the session is present in
AUTHENTICATION_BACKENDS. If so, it uses the backend'sget_user()method to retrieve the user model instance and then verifies the session by calling the user model'sget_session_auth_hash()method.Returns an instance of
AnonymousUserif the authentication backend stored in the session is no longer inAUTHENTICATION_BACKENDS, if a user isn't returned by the backend'sget_user()method, or if the session auth hash doesn't validate.