Menerapkan Autentikasi dan Otorisasi Pengguna di Django

Autentikasi pengguna memastikan bahwa pengguna dapat masuk dan mengakses akun mereka dengan aman. Di sisi lain, otorisasi menentukan tindakan apa yang boleh dilakukan oleh pengguna yang diautentikasi. Django menyediakan sistem autentikasi tangguh yang mudah diintegrasikan dan diperluas untuk tujuan ini.

Menyiapkan Sistem Autentikasi Default

Sistem autentikasi bawaan Django disertakan dalam konfigurasinya secara default. Pastikan aplikasi berikut tercantum di bagian INSTALLED_APPS dari settings.py Anda:

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

Migrasikan database untuk menyiapkan tabel yang diperlukan:

python manage.py migrate

Membuat Model Pengguna

Django menyediakan model pengguna bawaan, tetapi Anda dapat membuat model khusus jika diperlukan. Untuk menggunakan model default:

from django.contrib.auth.models import User

# Creating a new user
user = User.objects.create_user(username='johndoe', password='securepassword')
user.email = 'johndoe@example.com'
user.save()

Untuk membuat model pengguna khusus, ubah models.py Anda:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True, null=True)

Perbarui pengaturan AUTH_USER_MODEL di settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Menangani Login dan Logout Pengguna

Django menyediakan tampilan bawaan untuk login dan logout. Tambahkan URL berikut ke urls.py Anda:

from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

Buat templat login sederhana bernama registration/login.html:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log in</button>
</form>

Membatasi Akses dengan Izin

Django menyediakan kelas izin untuk membatasi akses. Untuk menggunakannya dalam tampilan:

from django.contrib.auth.decorators import login_required, permission_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

@permission_required('yourapp.can_edit')
def edit_page(request):
    return render(request, 'edit_page.html')

Izin dapat diberikan menggunakan admin Django atau melalui shell:

from django.contrib.auth.models import User, Permission

user = User.objects.get(username='johndoe')
permission = Permission.objects.get(codename='can_edit')
user.user_permissions.add(permission)

Kesimpulan

Sistem autentikasi dan otorisasi Django menyediakan fondasi yang kuat untuk mengamankan aplikasi web Anda. Sistem ini sangat dapat disesuaikan, sehingga Anda dapat memperluas fungsionalitasnya untuk memenuhi persyaratan tertentu. Dengan sistem ini, Anda dapat mengelola akun pengguna, peran, dan izin dalam proyek Anda dengan mudah.