Авторизация изображений на сервисе Django с помощью JWT

Я пытаюсь обслуживать изображения с моего сервера Django. Мне нужно, чтобы эти изображения были защищены JWT-токеном моего пользователя.

Например. Если пользователь получает профиль 1, а в профиле 1 есть изображение ABC. Если у пользователя нет доступа к профилю 1, он не сможет перейти по адресу BASE_URL/static/images/ABC.jpg и получить изображение.

Вы не можете обеспечить безопасность static.

Если ваш пользователь аутентифицирован, вы имеете доступ к аутентифицированному пользователю по вашему http-методу -> request.user.

Если изображения не очень большие, вы можете хранить их в базе данных в формате base64.

Если вы хотите проверить свой токен вручную, не используя систему аутентификации django, вы можете попробовать следующее

from rest_framework_simplejwt.authentication import JWTTokenUserAuthentication
from rest_framework_simplejwt.tokens import AccessToken
from rest_framework.exceptions import AuthenticationFailed, NotAuthenticated

class Test(APIView):
    def get(self, request):
        token = request.COOKIES.get('JWT', None)  # the cookie should be set prior to that point
        if token is None:
            return NotAuthenticated()
        else:
            payload= JWTTokenUserAuthentication().get_user(AccessToken(token, verify=True).payload)
            user = User.objects.filter(id=payload.get('user_id')).first()
            if user:
                # your code
            else:
                # raise unknown user
        return ...

Я не тестировал код, но частично использовал его.

Вернуться на верх