Django – User and authentication

Xin chào mọi người, tiếp tục series về Django framework của team, hôm nay chúng ta sẽ nghiên cứu đến User và authentication nhé!

User


Đối tượng User

Đối tượng User là thành phần quan trọng nhất của hệ thống authentication trong django. Thông thường nó sẽ đại diện cho người dùng tương tác với website của bạn, và có thể được sử dụng để phân quyền cho người dùng đó. Điều thú vị là, chỉ có duy nhất một class User trong hệ thống authentication của django. Ngay cả superuser cũng chỉ là một đối tượng của class User, nhưng có thêm các thuộc tính đặc biệt.

Các thuộc tính cơ bản của User bao gồm:

  • username
  • password
  • email
  • first_name
  • last_name

Khởi tạo superuser

Để khởi tạo superuser, chúng ta sử dụng lệnh createsuperuser:

$ python manage.py createsuperuser --username=ha_tb --email=ha_tb@septeni-technology.jp

Sau đó các bạn sẽ được yêu cầu nhập password, nhập xong là superuser của các bạn đã được tạo rồi. Còn nếu không có 2 option username và email trong câu lệnh, command prompt/terminal sẽ hỏi bạn các thông tin này trước khi hỏi đến password.

Khởi tạo user

Cách đơn giản nhất để tạo một user là sử dụng phương thức create_user() có sẵn:

from django.contrib.auth.models import User
user = User.objects.create_user('ha_tb', 'ha_tb@septeni-technology.jp', 'password')

user.save()

Cách thứ hai là tạo user trong django admin:

Nhấn vào nút ADD USER, nhập các thông tin cần thiết và Save thôi, rất đơn giản đúng không nào.

Xác thực user


Để xác thực user, hãy sử dụng phương thức authenticate() và truyền vào các thông tin credentials, mặc định là username và password. Nếu các thông tin này là đúng, nó sẽ trả về 1 đối tượng User tương ứng, còn nếu sai sẽ trả về None. Sau đó chúng ta chỉ việc kiểm tra kết quả trả về và quyết định các bước xử lý tiếp theo:

from django.contrib.auth import authenticate
user = authenticate(username='ha_tb', password='password')
if user is not None:
    # A backend authenticated the credentials
else:
    # No backend authenticated the credentials

 Login cho user

Thông thường sau khi xác thực user thành công, bạn sẽ muốn login cho người dùng đó. Để thực hiện việc này, django đã xây dựng sẵn cho bạn phương thức login(). Việc của bạn chỉ là truyền vào cho nó 1 request và 1 user, và django sẽ lưu user ID vào session giúp bạn:

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        ...
    else:
        # Return an 'invalid login' error message.
        ...

Logout cho user

Đã có login thì chắc chắn phải có logout đúng không? Và thậm chí còn đơn giản hơn login, hãy gọi phương thức logout() với đầu vào request, và toàn bộ dữ liệu session của request hiện tại sẽ được xoá sạch cho bạn:

from django.contrib.auth import logout

def logout_view(request):
    logout(request)
    # Redirect to a success page.

Hãy chú ý rằng logout() sẽ không trả về lỗi nếu người dùng chưa login trước đó, vì vậy bạn sẽ không thể kiểm tra lỗi bằng cách này đâu!

Tổng kết


Vừa rồi chúng ta đã cùng nhau tìm hiểu những thao tác cơ bản nhất về user và authentication trong Django, bao gồm:

  • Đối tượng User
  • Cách tạo superuser
  • Cách tạo user
  • Xác thực user
  • Login, logout cho user

Hy vọng bài viết đã giúp cho các bạn đang trong quá trình tìm hiểu Django framework có một cái nhìn tổng quan về user và authentication. Hẹn gặp lại các bạn trong các bài viết sau nhé!

Tài liệu tham khảo


https://docs.djangoproject.com/en/3.1/topics/auth/default/

 

Add a Comment