Triển khai xác thực và ủy quyền người dùng trong Django

Xác thực người dùng đảm bảo rằng người dùng có thể đăng nhập và truy cập tài khoản của họ một cách an toàn. Mặt khác, ủy quyền xác định những hành động mà người dùng đã xác thực được phép thực hiện. Django cung cấp một hệ thống xác thực mạnh mẽ, dễ tích hợp và mở rộng cho các mục đích này.

Thiết lập hệ thống xác thực mặc định

Hệ thống xác thực mặc định của Django được bao gồm trong cấu hình của nó theo mặc định. Đảm bảo các ứng dụng sau được liệt kê trong phần INSTALLED_APPS của settings.py của bạn:

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

Di chuyển cơ sở dữ liệu để thiết lập các bảng cần thiết:

python manage.py migrate

Tạo mô hình người dùng

Django cung cấp một mô hình người dùng tích hợp, nhưng bạn có thể tạo một mô hình tùy chỉnh nếu cần. Để sử dụng mô hình mặc định:

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()

Để tạo mô hình người dùng tùy chỉnh, hãy sửa đổi models.py của bạn:

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)

Cập nhật cài đặt AUTH_USER_MODEL trong settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Xử lý Đăng nhập và Đăng xuất của Người dùng

Django cung cấp các chế độ xem tích hợp để đăng nhập và đăng xuất. Thêm các URL sau vào urls.py của bạn:

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'),
]

Tạo một mẫu đăng nhập đơn giản có tên registration/login.html:

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

Hạn chế quyền truy cập bằng Quyền

Django cung cấp các lớp quyền để hạn chế quyền truy cập. Để sử dụng chúng trong chế độ xem:

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')

Quyền có thể được gán bằng cách sử dụng Django admin hoặc thông qua 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)

Phần kết luận

Hệ thống xác thực và ủy quyền của Django cung cấp nền tảng vững chắc để bảo mật các ứng dụng web của bạn. Hệ thống này có khả năng tùy chỉnh cao, cho phép bạn mở rộng chức năng của nó để đáp ứng các yêu cầu cụ thể. Với hệ thống này, bạn có thể dễ dàng quản lý tài khoản người dùng, vai trò và quyền trong các dự án của mình.