Как я могу передать CSRF-токен с моими API-запросами, если у меня нет логина пользователя для моего Django-сайта?
Используя фреймворк Django rest, я создал конечную точку API, которую я вызываю в своих статических файлах и в которую я хотел бы передать токен CSRF, чтобы только я мог получить доступ к API.
На моем сайте Django нет пользователей с логинами.
По сути, я хочу сделать что-то вроде этого в моей конечной точке API:
@api_view(['POST'])
def payment(request, *args, **kwargs):
if (("Authorization" not in requests.headers) or (request.headers["Authorization"] != "token")):
return Response({"Error": "Not authorized for access."})
...
Нужно ли мне сгенерировать токен один раз и использовать его многократно? Или я могу генерировать его каждый раз, когда используется скрипт? И как я могу получить доступ к этому токену csrf в моем HTML файле? Я использую представления на основе классов и предполагаю, что передам его в get_context_data, но как мне настроить конечную точку API на прием этого CSRF-токена?
Я бы посоветовал использовать TokenAuthentication
прямо из django-restframework:
https://www.django-rest-framework.org/api-guide/authentication/
Затем вы передадите токен в заголовке всех ваших запросов
например Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
Если вы используете декораторы из django-restframework, вы можете пропустить все пользовательские проверки токенов, так как это делается django-restframework.
@api_view(['POST'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def payment(request, *args, **kwargs):
# ...