Авторизация изображений на сервисе 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 ...
Я не тестировал код, но частично использовал его.