Django ninja аутентификация токенов с помощью djoser
Я реализовал CRUD с помощью фреймворка Django Ninja, но теперь мне нужен auth в моем приложении, Я установил и настроил Djoser, так что теперь я могу генерировать токены, но я не знаю, как проверить их в моих CRUD'ах
class AuthBearer(HttpBearer):
def authenticate(self, request, token):
if token == "supersecret":
return token
@api.get("/bearer", auth=AuthBearer())
def bearer(request):
return {"token": request.auth}
Я должен уметь проверять токен внутри функции "AuthBearer", но я не знаю как
my repo (link)
По сути, вам нужно расширить класс Ninja HttpBearer и реализовать метод authenticate, который будет принимать запрос и токен в качестве параметров. Этот метод возвращает None, если пользователь не аутентифицирован, и строку, которая будет заполнена в request.auth, если пользователь аутентифицирован. Обычно эта строка будет именем пользователя, поэтому вы можете использовать ее во всех ваших конечных точках. Что-то вроде этого (я использую PyJWT для декодирования токенов):
import jwt
from ninja.security import HttpBearer
class AuthBearer(HttpBearer):
def authenticate(self, request, token):
try:
#JWT secret key is set up in settings.py
JWT_SIGNING_KEY = getattr(settings, "JWT_SIGNING_KEY", None)
payload = jwt.decode(token, JWT_SIGNING_KEY, algorithms=["HS256"])
username: str = payload.get("sub")
if username is None:
return None
except jwt.PyJWTError as e:
return None
return username