Django cung cấp một hệ thống xác thực mặc định cho lập trình viên. Tuy nhiên, bạn có thể tạo một hệ thống đăng nhập an toàn với các tài khoản mạng xã hội trong Django bằng OAuth.
Xác thực người dùng trong Django
Hệ thống xác thực mặc định mà Django cung cấp dùng phương pháp truyền thống, liên quan tới thu thập dữ liệu như tên người dùng, email, mật khẩu, tên gọi, tên họ…
Theo thiết kế, hệ thống xác thực của Django rất chung chung và không cung cấp nhiều tính năng được dùng ở hầu hết hệ thống xác thực web hiện nay. Để bổ sung cho điều đó, bạn sẽ muốn dùng các gói bên thứ ba như package django-allauth.
Cách kích hoạt OAuth trong Django
Để xác thực người dùng bằng OAuth trong ứng dụng Django, bạn có thể dùng package Django tên django-allauth.
Django Allauth là một gói xử lý xác thực, đăng ký, quản lý tài khoản và xác thực tài khoản bên thứ ba cho dự án Django. Những bước sau sẽ hướng dẫn bạn cách thiết lập Django Allauth cho dự án Django.
Bước 1: Cài và thiết lập Django-Allauth
Tạo một môi trường ảo và cài đặt django-allauth qua pip:
pip install django-allauth
Lưu ý rằng bạn phải dùng Python 3.5 trở lên và Django 2.0 trở lên để làm việc đó.
Bước 2: Thêm các ứng dụng được yêu cầu vào Django cho Django-Allauth
Sau khi cài django-allauth, mở file settings.py và thêm ứng dụng sau vào danh sách INSTALLED_APPS:
INSTALLED_APPS = [
"""
Thêm app khác tại đây
"""
# Djang Allauth configuration apps
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
Sau đây là một số điểm cần lưu ý về một số app trên:
- allauth.socialaccount cho phép người dùng đăng nhập qua các ứng dụng mạng xã hội.
- django.contrib.sites tích hợp vào framework Django để django-allauth hoạt động.
Bước 3: Xác định Authentication Backend cho dự án của bạn
Bạn có thể làm việc này bằng cách cấu hình AUTHENTICATION_BACKENDS trong file settings.py. Đối với django-allauth, bạn nên thêm:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
Đoạn code trên xác định 2 backends:
- Đầu tiên là bakend mặc định được dùng bởi Django.
- Thứ hai xác thực backend xác thực cho django-allauth.
Bước 4: Thêm ID của trang
Trong file cài đặt, bạn nên thêm ID cho trang. Ví dụ:
SITE_ID = 1
Mặc định, có một trang tên example.com trong bảng admin. Bạn có thể quyết định chỉnh sửa trang này hoặc tự mình thêm mới. Trong cả hai trường hợp, bạn đều cần đăng nhập vào bảng admin và điều hướng tới app Sites.
Để lấy ID trang cho một trang Django, mở CLI và chạy lệnh:
python manage.py shell
Tiếp theo, viết tập lệnh này vào shell Python:
from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
site_id = current_site.id
site_name = current_site.name
print("Site ID:", site_id)
print("Site Name:", site_name)
Code trên sẽ in tên của trang cùng với ID của nó.
Bước 5: Cấu hình URL
Trong file urls.py, cấu hình mẫu URL cho django-allauth. Code trông sẽ như sau:
from django.urls import path, include
urlpatterns = [
# Djang-allauth url pattern
path('accounts/', include('allauth.urls')),
]
Với thiết lập này, bạn có thể bắt đầu server lập trình và điều hướng tới http://127.0.0.1:8000/accounts/. Nếu đã đặt DEBUG sang True, bạn sẽ thấy danh sách các mẫu URL sẵn có cho django-allauth.
Nếu đã hoàn thành các bước trên, dự án của bạn đã sẵn sàng để xác thực trên mạng xã hội.
Cách triển khai đăng nhập/đăng ký Google trong app Django
Sau khi thiết lập django-allauth, bạn đã sẵn sàng cho phép người dùng tự xác thực bằng các tài khoản mạng xã hội như Google.
Bước 1: Đăng ký nhà cung cấp tài khoản mạng xã hội trong ứng dụng đã cài
Ở file settings.py, bạn có thể thêm nhà cung cấp tài khoản mạng xã hội trong INSTALLED_APPS. Ở đây là Google.
Bước 2: Tạo IDclient và khóa bí mật trên Google
Để hoàn thành bước này, bạn phải tạo tài khoản Google. Nếu đã làm việc này, hãy thực hiện các bước tiếp theo:
- Tới console Google Cloud để tạo dự án mới. Đầu tiên, click vào menu thả xuống như ở ảnh trên.
- Tiếp theo, click NEW PROJECT.
- Nhập tên cho dự án, rồi click nút CREATE.
- Khi đã chọn dự án, click menu hamburger. Chọn APIs & Services > Credentials.
- Tiếp theo, click lựa chọn CONFIGURE CONSENT SCREEN và chọn External.
- Ở trang tiếp theo, nhập tên cho ứng dụng và bao gồm một email tại nơi cần thiết. Bạn cũng có thể khám phá các cấu hình cho một số tùy biến. Sau khi hoàn tất, click SAVE AND CONTINUE.
- Ở menu bên tay trái, chọn Credentials. Sau đó, click CREATE CREDENTIALS > chọn OAuth client ID.
- Tiếp theo, chọn Application type và nhập tên cho cùng loại đó. Ở hướng dẫn này, Application sẽ là Web application.
- Tiếp theo, thêm URL cho Authorized JavaScript origins và Authorized redirect URIs. Host của web phải có nguồn gốc JavaScript, và hệ thống này sẽ đưa người dùng tới URL chuyển hướng sau khi xác thực. URL chuyển hướng thường chứa your-host-name/accounts/google/login/callback/. Đối với chế độ lập trình, nó sẽ là: http://127.0.0.1:8000/accounts/google/login/callback/. Click CREATE khi hoàn tất.
- Sau khi tạo xác thực, bạn có thể sao chép Client ID hoặc Client secret tới một nơi an toàn hoặc tải chúng dưới dạng file JSON.
Bước 3: Thêm ID client và khóa bí mật vào app Django
Sau khi tạo các xác thực cần thiết, tới http://127.0.0.1:8000/admin, chọn Social applications và tạo ứng dụng xã hội mới. Hãy làm theo các bước sau:
- Thêm nhà cung cấp. Nhà cung cấp xác thực người dùng. Ở đây là Google.
- Nhập tên cho app xã hội mới.
- Dán thông tin vào trong Client ID mà bạn đã sao chép từ Google.
- Đối với Secret key, dán vào trong Client secret bạn đã sao chép từ Google.
- Trường Key không áp dụng để xác thực với Google, vì thế, hãy bỏ qua nó.
- Cuối cùng, chọn một trang liên kết với ứng dụng mạng xã hội.
Bước 4: Kiểm tra xác thực Google
Thoát bảng admin và tới http://127.0.0.1:8000/accounts/login/. Bạn sẽ thấy lựa chọn đăng nhập qua Google.
Click vào nó để chuyển hướng tới màn hình đồng ý. Tiếp theo, chọn tài khoản để đăng nhập.
Sau khi đã chọn một tài khoản, bạn sẽ được chuyển hướng tới http://127.0.0.1:8000/accounts/profile/. Điều này có nghĩa ứng dụng đang hoạt động hoàn hảo. Bạn có thể tạo các mẫu tùy chỉnh để thay thế lựa chọn mặc định.
Thế là xong! Thật đơn giản phải không?