---
title: "django.contrib.auth"
version: 1.10
locale: id
source: https://docs.djangoproject.com/id/1.10/ref/contrib/auth/
canonical: https://djangodocs.dev/id/1.10/ref/contrib/auth/
---
# `django.contrib.auth`

Dokumen ini menyediakan bahan acuan API untuk komponen-komponen dari sistem otentifikasi Django. Untuk rincian lebih pada penggunaan dari komponen-komponen ini atau bagaimana menyesuaikan autentifikasi dan otorisasi lihat [authentication topic guide](/id/1.10/topics/auth/).

## Model `User`

### Bidang

#### `class models.User`

Obyek [`User`](#id1) mempunyai bidang berikut:

#### `username`

Diwajibkan. 150 karakter atau lebih sedikit. Nama pengguna dapat mengandung alfanumerik, `_`, `@`, `+`, `.` dan `-` karakter.

`max_length` harus cukup untuk banyak penggunaan kasus. Jika anda butuh panjang lebih, harap gunakan [custom user model](/id/1.10/topics/auth/customizing/#specifying-custom-user-model). Jika anda menggunakan MySQL dengan penyandian `utf8mb4` (dianjurkan untuk dukungan Unicode sesuai), tentukan kebanyakan `max_length=191` karena MySQL hanya dapat membuat unik indeks dengan 192 karakter dalam kasus itu secara awalan.

> **Nama pengguna dan Unicode**
>
> Django aslinya menerima hanya huruf ASCII dalam nama pengguna. Meskipun itu pilhan tidak disengaja, karakter Unicode selalu diterima ketika menggunakan Python 3.0. Django 1.10 secara resmi menambahkan dukungan Unicode dalam nama pengguna, menjaga perilaku hanya-ASCII pada Python 2.

> **Changed in Django 1.10**
>
> `max_length` meningkat dari 30 menjadi 150 karakter.

#### `first_name`

Pilihan. 30 karakter atau sedikit.

#### `last_name`

Pilihan. 30 karakter atau sedikit.

#### `email`

Pilihan. Alamat surel.

#### `password`

Diwajibkan. Sebuah campuran dari, dan metadata tentang, sandi. (Django tidak menyimpan sandi mentah.) Sandi mentah dapat berubah-ubah lama dan dapat mengandung karakter apapun. Lihat [password documentation](/id/1.10/topics/auth/passwords/).

#### `groups`

Hubungan banyak-ke-banyak ke [`Group`](#id6)

#### `user_permissions`

Hubungan banyak-ke-banyak ke [`Permission`](#id3)

#### `is_staff`

Boolean. Menandai apakah pengguna ini dapat mengakses situs admin.

#### `is_active`

Boolean. Menunjukkan apakah akun pengguna ini harus dianggap aktif. Kami menganjurkan bahwa anda menyetel bendera ini menjadi `False` daripada menghapus akun-akun; cara itu, jika aplikasi anda mempunyai foreign key apapun ke pengguna, foreign key tidak akan rusak.

Ini tidak perlu mengendalikan apakah atau tidak pengguna dapat masuk. Backend otentifikasi tidak dibutuhkan untuk memeriksa untuk bendera `is_flag` tetap backend awalan ([`ModelBackend`](#django.contrib.auth.backends.ModelBackend)) dan [`RemoteUserBackend`](#django.contrib.auth.backends.RemoteUserBackend) melakukannya. Anda dapat menggunakan [`AllowAllUsersModelBackend`](#django.contrib.auth.backends.AllowAllUsersModelBackend) atau [`AllowAllUsersRemoteUserBackend`](#django.contrib.auth.backends.AllowAllUsersRemoteUserBackend) jika anda ingin mengizinkan pengguna tidak aktif untuk masuk. Di kasus ini, anda akan juga ingin menyesuaikan [`AuthenticationForm`](/id/1.10/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm) digunakan oleh tampilan [`login()`](/id/1.10/topics/auth/default/#django.contrib.auth.views.login) ketika itu menolak pengguna tidak aktif. Waspada bahwa metode pemeriksaan-perizinan seperti [`has_perm()`](#django.contrib.auth.models.User.has_perm) dan otentifikasi di admin Django semua mengembalikan `False` untuk pengguna tidak aktif.

> **Changed in Django 1.10**
>
> Dalam versi terlama, [`ModelBackend`](#django.contrib.auth.backends.ModelBackend) dan [`RemoteUserBackend`](#django.contrib.auth.backends.RemoteUserBackend) mengizinkan pengguna tidak aktif untuk di autentifikasi.

#### `is_superuser`

Boolean. Menunjuk bahwa pengguna ini mempunyai semua perizinan tanpa secara jelas menetapkan mereka.

#### `last_login`

Tanggalwaktu dari masuk terakhir pengguna.

#### `date_joined`

Sebuah datetime menunjukkan ketika akun telah dibuat. Adalah disetel ke tanggal/waktu saat ini secara awalan ketika akun dibuat.

### Atribut

#### `class models.User`

#### `is_authenticated`

Atribut hanya-baca yang selalu `True` (sebagai lawan `AnonymousUser.is_authenticated` yang selalu `False`). Ini adalah cara untuk memberitahu jika pengguna telah diotentifikasi. Ini tidak berarti perizinan apapun dan tidak memeriksa jika pengguna adalah aktif atau mempunyai sesi sah. Meskipun secara biasa anda akan memeriksa atribut ini pada `request.user` untuk menemukan apakah itu telah dikumpulkan oleh [`AuthenticationMiddleware`](/id/1.10/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware) (mewakili pengguna masuk saat ini), anda harus mengetahui atribut ini adalah `True` untuk tiap instance [`User`](#id1).

> **Changed in Django 1.10**
>
> Di versi terlama, ini adalah metode . Dukungan kesesuaian kebelakang mendukung untuk menggunakannya sebagai cara akan dipindahkan di Django 2.0.

#### `is_anonymous`

Atribut hanya-baca yaitu selalu `False`. Ini adalah jalan untuk membedakan obyek [`User`](#id1) and [`AnonymousUser`](#django.contrib.auth.models.AnonymousUser). Umumnya, anda harus memilih menggunakan [`is_authenticated`](#django.contrib.auth.models.User.is_authenticated) pada atribut ini.

> **Changed in Django 1.10**
>
> Di versi terlama, ini adalah metode . Dukungan kesesuaian kebelakang mendukung untuk menggunakannya sebagai cara akan dipindahkan di Django 2.0.

### Cara

#### `class models.User`

#### `get_username()`

Mengembalikan nama pengguna untuk pengguna. Sejak model `User` dapat bertukar, anda haus menggunakan metode ini daripada mengacu atribut nama pengguna secara langsung.

#### `get_full_name()`

Mengembalikan [`first_name`](#django.contrib.auth.models.User.first_name) ditambah [`last_name`](#django.contrib.auth.models.User.last_name), dengan spasi diantaranya.

#### `get_short_name()`

Mengembalikan [`first_name`](#django.contrib.auth.models.User.first_name).

#### `set_password(raw_password)`

Setel sandi pengguna ke string mentah yang diberikan, merawat campuran sandi. Tidak menyimpan obyek [`User`](#id1).

Ketika `raw_password` adalah `None`, sandi akan disetel menjadi sebuah sandi tidak berguna, seperti jika [`set_unusable_password()`](#django.contrib.auth.models.User.set_unusable_password) digunakan.

#### `check_password(raw_password)`

Mengembalikan `True` jika deretan karakter mentah yang diberikan adalah sandi benar untuk pengguna. (Ini merawat hash sandi dalam membuat perbandingan.)

#### `set_unusable_password()`

Tandai pengguna sebagai tidak mempunyai sandi tidak disetel. Ini tidak sama seperti memiliki string kosong untuk sebuah sandi. [`check_password()`](#django.contrib.auth.models.User.check_password) untuk pengguna ini tidak akan pernah mengembalikan `True`. Tidak menyimpan obyek [`User`](#id1).

Anda mungkin butuh ini jika otentifikasi untuk aplikasi anda memakan tempat terhadap sumber luar yang ada seperti pelipat LDAP.

#### `has_usable_password()`

Mengembalikan `False` jika [`set_unusable_password()`](#django.contrib.auth.models.User.set_unusable_password) telah dipanggil untuk pengguna ini.

#### `get_group_permissions(obj=None)`

Mengembalikan deretan karakter kumpulan perizinan yang pengguna punyai, melalui kelompok mreka.

Jika `obj` diloloskan, hanya mengembalikan perizinan kelompok untuk obyek tertentu ini.

#### `get_all_permissions(obj=None)`

Mengembalikan sekumpulan deretan karakter perizinan yang pengguna punyai, kedua melalui perizinan kelompok dan pengguna.

Jika `obj` diloloskan. hanya mengembalikan perizinan untuk obyek tertentu ini.

#### `has_perm(perm, obj=None)`

Mengembalikan `True` jika pengguna mempunyai perizinan tertentu, dimana perm dalam bentuk `"<app label>.<permission codename>"` (lihat dokumentasi pada [permissions](/id/1.10/topics/auth/default/#topic-authorization)). Jika pengguna tidak aktif, metode ini akan selalu mengembalikan `False`.

Jika `obj` diloloskan, metode ini tidak akan memeriksa untuk sebuah perizinan untuk model, tetapi untuk obyek tertentu ini.

#### `has_perms(perm_list, obj=None)`

Mengembalikan `True` jika pengguna mempunyai setiap perizinan tertentu, dimana setiap perizinan dalam bentuk `"<app label>.<permission codename>"`. Jika pengguna tidak aktif, metode ini akan selalu mengembalikan `False`.

Jika `obj` diloloskan, metode ini tidak akan memeriksa untuk perizinan-perizinan untuk model, tetapi untuk obyek tertentu.

#### `has_module_perms(package_name)`

Mengembalikan `True` jika pengguna mempunyai perizinan apapun di paket yang diberikan (label aplikasi Django). Jika pengguna tidak aktif, metode ini akan selalu mengembalikan `False`.

#### `email_user(subject, message, from_email=None, **kwargs)`

Mengirim sebuah surel ke pengguna. Jika `from_email` adalah `None`, Django menggunakan [`DEFAULT_FROM_EMAIL`](/id/1.10/ref/settings/#std-setting-DEFAULT_FROM_EMAIL). `**kwargs` apapun dilewatkan ke panggilan [`send_mail()`](/id/1.10/topics/email/#django.core.mail.send_mail) pokok

### Pengelola metode

#### `class models.UserManager`

Model [`User`](#id1) mempunyai pengelola penyesuaian yang mempunyai metode pembantu berikut (sebagai tambahan pada metode disediakan oleh [`BaseUserManager`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.BaseUserManager)):

#### `create_user(username, email=None, password=None, **extra_fields)`

Buat, simpan dan mengembalikan [`User`](#id1).

[`username`](#django.contrib.auth.models.User.username) dan [`password`](#django.contrib.auth.models.User.password) disetel sesuai yang diberikan. Bagian ranah dari [`email`](#django.contrib.auth.models.User.email) adalah otomatis mengubah ke huruf kecil, dan mengembalikan obyek [`User`](#id1) akan menyetel [`is_active`](#django.contrib.auth.models.User.is_active) ke `True`.

Jika tidak ada sandi disediakan, [`set_unusable_password()`](#django.contrib.auth.models.User.set_unusable_password) akan dipanggil.

Argumen kata kunci `extra_fields` dilewatkan melalui metode [`User`](#id1)’s `__init__` untuk mengizinkan mengatur bidang yang berubah-ubah pada [custom user model](/id/1.10/topics/auth/customizing/#auth-custom-user).

Lihat [Membuat pengguna](/id/1.10/topics/auth/default/#topics-auth-creating-users) sebagai contoh penggunaan.

#### `create_superuser(username, email, password, **extra_fields)`

Sama seperti [`create_user()`](#django.contrib.auth.models.UserManager.create_user), but sets [`is_staff`](#django.contrib.auth.models.User.is_staff) dan [`is_superuser`](#django.contrib.auth.models.User.is_superuser) menjadi `True`.

## Obyek `AnonymousUser`

#### `class models.AnonymousUser`

[`django.contrib.auth.models.AnonymousUser`](#django.contrib.auth.models.AnonymousUser) adalah kelas yang menerapkan antarmuka [`django.contrib.auth.models.User`](#id1), dengan perbedaan ini:

- [id](/id/1.10/topics/db/models/#automatic-primary-key-fields) selalu `None`.
- [`username`](#django.contrib.auth.models.User.username) adalah selalu string kosong.
- [`get_username()`](#django.contrib.auth.models.User.get_username) selalu mengembalikan deretan kalimat kosong.
- [`is_anonymous`](#django.contrib.auth.models.User.is_anonymous) adalah `True` daripada `False`.
- [`is_authenticated`](#django.contrib.auth.models.User.is_authenticated) adalah `False` daripada `True`.
- [`is_staff`](#django.contrib.auth.models.User.is_staff) dan [`is_superuser`](#django.contrib.auth.models.User.is_superuser) adalah selalu `False`.
- [`is_active`](#django.contrib.auth.models.User.is_active) adalah selalu `False`.
- [`groups`](#django.contrib.auth.models.User.groups) dan [`user_permissions`](#django.contrib.auth.models.User.user_permissions) adalah selalu kosong.
- [`set_password()`](#django.contrib.auth.models.User.set_password), [`check_password()`](#django.contrib.auth.models.User.check_password), [`save()`](/id/1.10/ref/models/instances/#django.db.models.Model.save) dan [`delete()`](/id/1.10/ref/models/instances/#django.db.models.Model.delete) memunculkan [`NotImplementedError`](https://docs.python.org/3/library/exceptions.html#NotImplementedError).

Dalam penerapannya, anda mungkin tidak butuh menggunakan obyek [`AnonymousUser`](#django.contrib.auth.models.AnonymousUser) anda sendiri, tetapi mereka digunakan oleh permintaan Jaringan, seperti yang dijelaskan di bagian selanjutnya.

## Model `Permission`

#### `class models.Permission`

### Bidang

Obyek [`Permission`](#id3) mempunyai bidang berikut:

#### `class models.Permission`

#### `name`

Dibutuhkan. 255 karakter atau sedikit. Contoh: `'Can vote'`.

#### `content_type`

Dibutuhkan. Mengacu ke tabel basisdata `django_content_type`, yang mengandung sebuah rekaman untuk setiap model terpasang.

#### `codename`

Dibutuhkan. 100 karakter atau sedikit. Contoh: `'can_vote'`.

### Cara

Obyek [`Permission`](#id3) mempunyai standar cara akses-data seperti lainnya [Django model](/id/1.10/ref/models/instances/).

## Model `Group`

#### `class models.Group`

### Bidang

Obyek [`Group`](#id6) mempunyai bidang berikut:

#### `class models.Group`

#### `name`

Dibutuhkan. 80 karakter atau sedikit. Karakter apapun diizinkan. Contoh: `'Awesome Users'`.

#### `permissions`

Bidang banyak-ke-banyak ke [`Permission`](#id3):

```
group.permissions.set([permission_list])
group.permissions.add(permission, permission, ...)
group.permissions.remove(permission, permission, ...)
group.permissions.clear()
```

## Pengesah

#### `class validators.ASCIIUsernameValidator`

> **New in Django 1.10**

Sebuah pengesah bidang mengizinkan hanya huruf ASCII, sebagai tambahan pada `@`, `.`, `+`, `-`, dan `_`. Pengesah awalan untuk `User.username` pada Python 2.

#### `class validators.UnicodeUsernameValidator`

> **New in Django 1.10**

Sebuah pengesah bidang mengizinkan huruf Unicode, sebagai tambahan pada `@`, `.`, `+`, `-`, dan `_`. Pengesah awalan untuk `User.username` pada Python 3.

## Sinyal masuk dan keluar

Kerangka kerja autentifikasi menggunakan [signals](/id/1.10/topics/signals/) berikut yang dapat digunakan untuk pemberitahuan ketika pengguna masuk atau keluar.

#### `user_logged_in()`

Terkirim ketika pengguna berhasil masuk.

Argumen dikirim dengan dinyal ini:

**`sender`**

  Kelas pengguna yang baru masuk.

**`request`**

  Instance [`HttpRequest`](/id/1.10/ref/request-response/#django.http.HttpRequest) saat ini.

**`user`**

  Instance pengguna yang baru masuk.

#### `user_logged_out()`

Dikirim ketika metode keluar dipanggil.

**`sender`**

  Seperti diatas: kelas dari pengguna yang baru keluar atau `None` jika pengguna tidak terautentifikasi.

**`request`**

  Instance [`HttpRequest`](/id/1.10/ref/request-response/#django.http.HttpRequest) saat ini.

**`user`**

  Antarmuka pengguna yang baru keluar atau `None` jika pengguna tidak terautentifikasi.

#### `user_login_failed()`

Terkirim ketika pengguna gagal berhasil masuk

**`sender`**

  Nama modul digunakan untuk pengecekan keaslian.

**`credentials`**

  A dictionary of keyword arguments containing the user credentials that were
  passed to [`authenticate()`](/id/1.10/topics/auth/default/#django.contrib.auth.authenticate) or your own custom
  authentication backend. Credentials matching a set of 'sensitive' patterns,
  (including password) will not be sent in the clear as part of the signal.

## Backend pembuktian keaslian

This section details the authentication backends that come with Django. For
information on how to use them and how to write your own authentication
backends, see the [Other authentication sources section](/id/1.10/topics/auth/customizing/#authentication-backends) of the [User authentication guide](/id/1.10/topics/auth/).

### Tersedia backend autentifikasi

Backend berikut tersedia di [`django.contrib.auth.backends`](#module-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](/id/1.10/topics/auth/customizing/)).

Itu juga menangangi model perizinan awalan seperti ditentukan untuk [`User`](#id1) dan [`PermissionsMixin`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.PermissionsMixin).

[`has_perm()`](#django.contrib.auth.backends.ModelBackend.has_perm), [`get_all_permissions()`](#django.contrib.auth.backends.ModelBackend.get_all_permissions), [`get_user_permissions()`](#django.contrib.auth.backends.ModelBackend.get_user_permissions),
and [`get_group_permissions()`](#django.contrib.auth.backends.ModelBackend.get_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 if
`obj is not None`.

#### `authenticate(username=None, password=None, **kwargs)`

Tries to authenticate `username` with `password` by calling
[`User.check_password`](#django.contrib.auth.models.User.check_password). If no `username`
is provided, it tries to fetch a username from `kwargs` using the
key [`CustomUser.USERNAME_FIELD`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.USERNAME_FIELD). Returns an
authenticated user or `None`.

#### `get_user_permissions(user_obj, obj=None)`

Returns the set of permission strings the `user_obj` has from their
own user permissions. Returns an empty set if
[`is_anonymous`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.is_anonymous) or
[`is_active`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.is_active) is `False`.

#### `get_group_permissions(user_obj, obj=None)`

Returns the set of permission strings the `user_obj` has from the
permissions of the groups they belong. Returns an empty set if
[`is_anonymous`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.is_anonymous) or
[`is_active`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.is_active)  is `False`.

#### `get_all_permissions(user_obj, obj=None)`

Returns the set of permission strings the `user_obj` has, including both
user permissions and group permissions. Returns an empty set if
[`is_anonymous`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.is_anonymous) or
[`is_active`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.is_active) is `False`.

#### `has_perm(user_obj, perm, obj=None)`

Uses [`get_all_permissions()`](#django.contrib.auth.backends.ModelBackend.get_all_permissions) to check if `user_obj` has the
permission string `perm`. Returns `False` if the user is not
[`is_active`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.is_active).

#### `has_module_perms(self, user_obj, app_label)`

Mengembalikan apakah `user_obj` mempunyai perizinan apapun pada `app_label` aplikasi.

#### `user_can_authenticate()`

> **New in Django 1.10**

Returns whether the user is allowed to authenticate. To match the
behavior of [`AuthenticationForm`](/id/1.10/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm)
which [`prohibits inactive users from logging in`](/id/1.10/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm.confirm_login_allowed),
this method returns `False` for users with [`is_active=False`](#django.contrib.auth.models.User.is_active). Custom user models that
don't have an [`is_active`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.is_active)
field are allowed.

#### `class AllowAllUsersModelBackend`

> **New in Django 1.10**

Sama seperti [`ModelBackend`](#django.contrib.auth.backends.ModelBackend) kecuali bahwa itu menolak pengguna tidak aktif karena [`user_can_authenticate()`](#django.contrib.auth.backends.ModelBackend.user_can_authenticate) selalu mengembalikan `True`.

Ketika menggunakan backend, anda akan ingin menyesuaikan [`AuthenticationForm`](/id/1.10/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm) digunakan oleh tampilan [`login()`](/id/1.10/topics/auth/default/#django.contrib.auth.views.login) dengan mengesampingkan metode [`confirm_login_allowed()`](/id/1.10/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm.confirm_login_allowed) ketika itu menolak pengguna tidak aktif.

#### `class RemoteUserBackend`

Use this backend to take advantage of external-to-Django-handled
authentication.  It authenticates using usernames passed in
[`request.META['REMOTE_USER']`](/id/1.10/ref/request-response/#django.http.HttpRequest.META).  See
the [Authenticating against REMOTE\_USER](/id/1.10/howto/auth-remote-user/)
documentation.

Jika anda butuh lebih kendali, anda dapat membuat backend autentifikasi sendiri yang mewarisi dari kelas ini dan mengesampingkan atribut ini atau metode:

#### `RemoteUserBackend.create_unknown_user`

`True` atau `False`. Menentukan apakah atau tidak obyek pengguna dibuat jika belum di basisdata Awalan menjadi `True`.

#### `RemoteUserBackend.authenticate(remote_user)`

The username passed as `remote_user` is considered trusted. This method
simply returns the user object with the given username, creating a new
user object if [`create_unknown_user`](#django.contrib.auth.backends.RemoteUserBackend.create_unknown_user) is `True`.

Mengembalikan `None` jika [`create_unknown_user`](#django.contrib.auth.backends.RemoteUserBackend.create_unknown_user) adalah `False` dan obyek `User` dengan nama pengguna yang diberikan tidak ditemukan dalam basisdata.

#### `RemoteUserBackend.clean_username(username)`

Melakukan pembersihan apapun pada `username` (sebagai contoh melucuti informasi LDAP DN) sebelum menggunakan itu untuk mendapatkan atau membuat sebuah obyek user. Mengembalikan nama pengguna dibersihkan.

#### `RemoteUserBackend.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.

#### `RemoteUserBackend.user_can_authenticate()`

> **New in Django 1.10**

Mengembalikan apaka pengguna diizinkan untuk autentifikasi. Metode ini mengembalikan `False` untuk pengguna dengan [`is_active=False`](#django.contrib.auth.models.User.is_active). Penyesuaian model user yang tidak mempunyai sebuah bidang [`is_active`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.CustomUser.is_active) adalah diizinkan.

#### `class AllowAllUsersRemoteUserBackend`

> **New in Django 1.10**

Sama seperti [`RemoteUserBackend`](#django.contrib.auth.backends.RemoteUserBackend) kecuali bahwa itu menolak pengguna tidak aktif karena `user_can_authenticate()` selalu mengembalikan `True`.

## Utility functions

#### `get_user(request)`

Mengembalikan instance model user terhubung dengan sesi `request` diberikan

It checks if the authentication backend stored in the session is present in
[`AUTHENTICATION_BACKENDS`](/id/1.10/ref/settings/#std-setting-AUTHENTICATION_BACKENDS). If so, it uses the backend's
`get_user()` method to retrieve the user model instance and then verifies
the session by calling the user model's
[`get_session_auth_hash()`](/id/1.10/topics/auth/customizing/#django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash)
method.

Returns an instance of [`AnonymousUser`](#django.contrib.auth.models.AnonymousUser)
if the authentication backend stored in the session is no longer in
[`AUTHENTICATION_BACKENDS`](/id/1.10/ref/settings/#std-setting-AUTHENTICATION_BACKENDS), if a user isn't returned by the
backend's `get_user()` method, or if the session auth hash doesn't
validate.
