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
Вернуться на верх