Tôi biết câu hỏi này là gần một năm cũ, nhưng tôi chỉ tìm ra cách để có được Djoser và django-nghỉ ngơi-knox để chơi cùng và chắc chắn đủ các kỹ thuật tương tự đã làm việc với djangorestframework-JWT như tốt. Bí quyết là biết rằng bạn có thể sử dụng điểm cuối tài khoản của Djoser mà không sử dụng điểm cuối liên quan đến xác thực của nó. Bạn chỉ cần đặt mỗi thư viện vào điểm cuối của riêng nó.
Đây là cách tôi thiết lập Django Nghỉ ngơi Framework để sử dụng JWTs để đăng nhập và xác thực đối với thiết bị đầu cuối Djoser (Tôi sẽ mang nó từ đầu đến cuối):
Đầu tiên, cài đặt djangorestframework-JWT và Djoser:
pip install djangorestframework-jwt djoser
định mà bạn muốn sử dụng JWTs để xác thực bằng cách thêm JSONWebTokenAuthentication
để DEFAULT_AUTHENTICATION_CLASSES
trong dự án của Django settings.py
của bạn:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
}
Tiếp theo, Thêm djoser.urls
và rest_framework_jwt của obtain_jwt_token
nhằm url của bạn:
from django.conf.urls import url, include
from rest_framework_jwt import views as jwt_views
urlpatterns = [
url(r'^account/', include('djoser.urls')),
url(r'^auth/login/', jwt_views.obtain_jwt_token, name='auth'),
]
Đó nên là tất cả mọi thứ bạn cần để bắt đầu.Chỉ cần để được an toàn, chạy một migrate
(Tôi quay lên một trường hợp hoàn toàn mới của Django Nghỉ ngơi Khung bài đăng này và vẫn chưa chạy các cam kết ban đầu trước khi thời điểm này):
python manage.py migrate
Để kiểm tra những điều trên, tạo một người dùng mới nếu bạn chưa có:
python manage.py createsuperuser
một khi bạn có một tài khoản người dùng, runserver
và sau đó thử đăng nhập để có được JWT của bạn:
http POST http://localhost:800/auth/login/ username = quản trị password = mật khẩu
Bạn sẽ nhận lại một mã thông báo:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
}
Sau đó bạn có thể sử dụng thẻ này để xác thực chống lại /me/ endpoint Djoser để lấy thông tin cá nhân của bạn. Chỉ bao gồm dấu hiệu của bạn trong vòng tiêu đề của yêu cầu của bạn như Authorization: JWT:
http http://localhost:8000/account/me/ "Authorization: JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0NTg2ODI3MzYsInVzZXJuYW1lIjoiYWRtaW4iLCJlbWFpbCI6IiIsInVzZXJfaWQiOjJ9.JDoVCpfiE0uGhsv9OQfPgPc-wxjjQtcEjwAI6bTLWRM"
Dưới đây là những gì tôi nhận lại:
{
"email": "",
"id": 2,
"username": "admin"
}
Như bạn có thể thấy, thật dễ dàng để bắt đầu chúng tôi ing JWTs để xác thực. Tôi đoán là các thư viện như djoser và django-rest-auth tập trung vào xác thực cơ bản, phiên hoặc mã thông báo vì chúng được đưa vào hộp DRF và do đó có lẽ là phương pháp phổ biến nhất mà mọi người xác thực cuộc gọi máy chủ của họ.
Vẻ đẹp của tất cả điều này là dễ dàng thực hiện một chương trình xác thực an toàn hơn vì Djoser không được kết hợp chặt chẽ với các lớp xác thực của riêng nó - nó sẽ vui vẻ tôn trọng bất cứ điều gì bạn đặt cho DEFAULT_AUTHENTICATION_CLASSES
.
Djoser gần đây đã nhận được hỗ trợ cho JWT dựa trên djangorestframework-jwt - http://djoser.readthedocs.io/en/latest/getting_started.html#installation và http://djoser.readthedocs.io/en/latest/ authentication_backends.html # json-web-token-authentication –