13

Tại sao khung công tác REST Django thực hiện cơ chế xác thực khác với cơ chế Django tích hợp?Tại sao khung công tác Django REST cung cấp các cơ chế xác thực khác nhau

Để wit, có hai lớp học thiết lập mà người ta có thể cấu hình:

  1. settings.AUTHENTICATION_BACKENDS mà xử lý việc xác thực Django cấp, và
  2. settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] mà xác nhận ở cấp REST Khung

Vấn đề tôi gặp phải là tôi có một lớp Middleware để kiểm tra xem người dùng có đăng nhập hay không.

Khi sử dụng ứng dụng khách web xác thực qua phiên, điều này hoạt động tốt. Tuy nhiên, từ thiết bị di động hoặc khi chạy bộ thử nghiệm (tức là xác thực bằng tiêu đề HTTP và mã thông báo), phần mềm trung gian phát hiện người dùng dưới dạng AnonymousUser, nhưng khi chúng tôi truy cập vào lớp khung REST, tiêu đề HTTP Authorization được đọc và người dùng đã đăng nhập.

Tại sao cả hai điều này không xảy ra TRƯỚC KHI phần mềm trung gian? Hơn nữa, tại sao các phương thức xác thực của REST Framework không dựa vào phần phụ trợ xác thực Django?

+0

Câu hỏi tuyệt vời @BillyBBone. Tôi đang gặp vấn đề tương tự. Bạn đã bao giờ tìm ra cách để xác thực yêu cầu DRF trong phần mềm trung gian của mình chưa? –

Trả lời

6

Django Rest Framework không thực hiện xác thực trong phần mềm trung gian theo mặc định vì cùng một lý do mà Django không thực hiện xác thực trong phần mềm trung gian theo mặc định: phần mềm trung gian áp dụng cho TẤT CẢ lượt xem và quá mức khi bạn chỉ muốn xác thực quyền truy cập vào một phần nhỏ các lượt xem của bạn. Ngoài ra, việc có khả năng cung cấp các phương thức xác thực khác nhau cho các điểm cuối API khác nhau là một tính năng rất tiện dụng.

Phương pháp xác thực của khung còn lại không dựa vào phụ trợ xác thực Django vì phần phụ trợ của Django được tối ưu hóa cho trường hợp thông thường và được liên kết chặt chẽ với mô hình người dùng. Rest Framework nhằm giúp bạn dễ dàng:

  1. Sử dụng nhiều phương pháp xác thực khác nhau. (Bạn muốn xác thực dựa trên HMAC? Được thực hiện! Điều này là không thể với khung công tác django auth)
  2. Phục vụ dữ liệu API mà không cần một cơ sở dữ liệu phía sau nó. (Bạn có một cơ sở dữ liệu redis với tất cả dữ liệu của bạn trong bộ nhớ? Phục vụ nó trong mili giây mà không bao giờ chờ đợi một chuyến đi vòng đến mô hình người dùng DB.)
+1

bạn có biết cách tạo một phần mềm trung gian cho các yêu cầu DRF không? –

+0

@SteveWalsh Giống như phần mềm trung gian cho mọi yêu cầu. Nếu bạn cần nó để chạy cụ thể trên các khung nhìn DRF, bạn có thể kiểm tra xem khung nhìn hiện tại có phân lớp từ ApiView cơ sở của DRF hay không. – Thomas

+0

Làm cách nào bạn có thể kiểm tra xem chế độ xem hiện tại có phân lớp từ ApiView cơ bản của DRF không? – awidgery

Các vấn đề liên quan