Tiếp nối bài Tạo JWT và xác thực quyền truy cập trong Django Rest Framework, trong bài này chúng ta sẽ tạo Register View cho phép người dùng tạo tài khoản truy cập ứng dụng.

Với Django, cách đơn giản nhất để tạo mới người dùng là sử dụng UserCreationForm. Tuy nhiên, trong bài trước chúng ta có tạo UserProfile model để thêm giá trị Role cho user. Do đó, trong bài này chúng ta sẽ tạo RegisterForm dựa trên UserCreationForm để thêm trường role. Chúng ta tạo mới file forms.py trong thư mục StockApp và viết RegisterForm như sau:

Tiếp theo, đối với UserProfile model, ta viết thêm hàm update_profile() sử dụng @receiver decorator (xem thêm về Signal tại đây https://docs.djangoproject.com/en/3.2/topics/signals/ ) để đảm bảo mỗi khi có một User được đăng ký thì đồng thời sẽ tạo ra UserProfile cho user đó:

– post_save: Gửi signal khi kết thúc hàm save()

– sender=User: chỉ nhận signal từ User Model

– instance: instance được lưu

– created: mang giá trị True khi việc lưu dữ liệu thành công (tham khảo thêm các giá trị của post_save tại đây https://docs.djangoproject.com/en/3.2/ref/signals/#post-save )

Khi người dùng tạo tài khoản thành công, ứng dụng sẽ gửi JWT token cho người dùng để cấp quyền truy cập. Do đó ta tạo thêm file StockApp/utilities.py và viết hàm generate_tokens() như sau:

Cuối cùng ta viết Register View như sau:

Lưu ý: hàm is_valid() sẽ kiểm tra các trường thông tin đăng ký tài khoản, bao gồm việc kiểm tra username có trùng lặp hay không, kiểm tra password và confirm password có giống nhau không, kiểm tra mức độ phức tạp của password (yêu cầu ít nhất 8 ký tự gồm cả chữ và số),..

Khởi chạy project sử dụng lệnh python manage.py runserver và dùng Postman để đăng ký tài khoản user1 (role=Guess) và user2 (role=Admin) với lệnh post request tới địa chỉ http://127.0.0.1:8000/stockApp/register/ , ta được kết quả sau

Kiểm tra lại thông tin của các token với https://jwt.io/#debugger-io, ta được kết quả role tương ứng với user đã đăng ký:Tiếp theo nếu ta tiếp tục đăng ký tài khoản mới với tên user 2 thì is_valid() sẽ kiểm tra và báo lỗi trùng với tài khoản đã đăng ký trước.Ngoài ra, is_valid() cũng kiểm tra độ phức tạp của password đăng ký và báo lỗi nếu password chưa đảm bảo yếu tố bảo mậtNhư vậy, chúng ta đã hoàn thành việc viết Register View cho phép người dùng đăng ký tài khoản truy cập ứng dụng. Các bạn có thể tham khảo code của bài này trong trang Github của Itech Seeker tại đây.

Tháng Tám 30, 2021
ITechSeeker