Django มีระบบ authentication ที่สมบูรณ์และมีมาในตัว (django.contrib.auth) ซึ่งจัดการ users, passwords, sessions/login และ permissions — เป็นอีกฟีเจอร์ "batteries-included" ที่ช่วยคุณไม่ต้องสร้าง (และทำผิด) ฟังก์ชันที่สำคัญต่อความปลอดภัยนี้
Django มีระบบ authentication ที่สมบูรณ์และมีมาในตัว (django.contrib.auth) ซึ่งจัดการ users, passwords, sessions/login และ permissions — เป็นอีกฟีเจอร์ "batteries-included" ที่ช่วยคุณไม่ต้องสร้าง (และทำผิด) ฟังก์ชันที่สำคัญต่อความปลอดภัยนี้
from django.contrib.auth.models import User
# passwords are HASHED automatically — never store plaintext
user = User.objects.create_user(username="ann", email="[email protected]", password="secret")
user.set_password("newpassword") # always use set_password (it hashes)
user.check_password("secret") # verify a password (constant-time)
User model ที่มีมาในตัวจัดการ การ hash password อย่างปลอดภัยโดยอัตโนมัติ (ใช้อัลกอริทึมที่แข็งแกร่งเช่น PBKDF2) — คุณไม่เคยเก็บหรือเปรียบเทียบ password แบบ plaintext กำจัดความเสี่ยงด้านความปลอดภัยที่สำคัญ
from django.contrib.auth import authenticate, login, logout
def login_view(request):
user = authenticate(request, username=username, password=password) # verify credentials
if user is not None:
login(request, user) # establish a SESSION (sets request.user)
return redirect("home")
# else: invalid credentials
def logout_view(request):
logout(request) # clear the session
authenticate() ตรวจสอบ credential และ login() สร้าง session — หลังจากนั้น request.user คือ user ที่ login อยู่ในทุก request (ผ่าน authentication middleware)
from django.contrib.auth.decorators import login_required
@login_required # redirect to login if not authenticated
def dashboard(request):
return render(request, "dashboard.html", {"user": request.user})
# for class-based views:
from django.contrib.auth.mixins import LoginRequiredMixin
class DashboardView(LoginRequiredMixin, ListView): ...
# checking permissions
request.user.is_authenticated # is someone logged in?
request.user.is_staff / is_superuser # role flags
request.user.has_perm("blog.add_article")# a specific permission
request.user.groups.all() # group membership (role-based access)
@permission_required("blog.add_article")
def create_article(request): ...
Django แยกแยะ authentication (คุณคือใคร — login) ออกจาก authorization (คุณทำอะไรได้ — permission) มันให้ permission ต่อ model (add/change/delete/view), group สำหรับการเข้าถึงตามบทบาท และ decorator/mixin เพื่อบังคับใช้
✓ Ready-made views/URLs for login, logout, password change/reset (django.contrib.auth.urls)
✓ Customizable: a CUSTOM USER MODEL (recommended from the start) to add fields,
custom backends (e.g. authenticate via email or OAuth), password validators
ระบบ authentication ที่มีมาในตัวของ Django เป็นฟีเจอร์สำคัญที่สำคัญต่อความปลอดภัย ซึ่งช่วยคุณไม่ต้องสร้างหนึ่งในส่วนที่เสี่ยงผิดพลาดและอันตรายที่สุดของ web application ด้วยตัวเอง
การเข้าใจมันเป็นสิ่งจำเป็นเพราะแทบทุก application จริงต้องการบัญชีผู้ใช้, login และการควบคุมการเข้าถึง — และการทำ authentication ผิดสร้างช่องโหว่ด้านความปลอดภัยที่ร้ายแรง (password แบบ plaintext, การ hash ที่อ่อนแอ, ข้อบกพร่องของ session)
ระบบของ Django จัดการสิ่งเหล่านี้ได้อย่างถูกต้องตั้งแต่แรก: มัน hash password อย่างปลอดภัย (อัลกอริทึมที่แข็งแกร่ง ไม่เคยเป็น plaintext — คุณใช้ create_user/set_password/check_password แทนการจัดการ password ด้วยมือ), จัดการ session และ login (authenticate/login โดยมี request.user พร้อมใช้ทุกที่ผ่าน middleware) และให้ authorization ผ่าน ระบบ permission และ group ที่สมบูรณ์
การรู้วิธีสร้างและ authenticate user, ป้องกัน view (@login_required, LoginRequiredMixin) และบังคับใช้ authorization ผ่าน permission และ group (แยกแยะ authentication — คุณคือใคร — ออกจาก authorization — คุณได้รับอนุญาตให้ทำอะไร) เป็นพื้นฐานในการสร้าง application ที่ปลอดภัย
ความสามารถในการขยายของระบบ — โดยเฉพาะการใช้ custom user model (แนะนำอย่างยิ่งตั้งแต่เริ่มโปรเจกต์) เพื่อเพิ่ม field และ custom backend สำหรับ login ด้วย email/OAuth — เป็นความรู้เชิงปฏิบัติที่สำคัญ
เพราะ authentication ทั้งพบทุกที่และสำคัญต่อความปลอดภัย และเพราะ Django ให้ทางออกแบบ batteries-included ที่แข็งแกร่งและถูกต้อง การเชี่ยวชาญระบบ auth ของมันเป็นความรู้หลักที่ช่วยให้คุณสร้าง application ที่ผู้ใช้เข้าถึงได้อย่างปลอดภัยโดยไม่ต้องประดิษฐ์ (และเสี่ยงกับ) ฟังก์ชันพื้นฐานนี้ใหม่