Forbidden (Проверка происхождения не удалась - chrome-extension:// не соответствует ни одному доверенному источнику).
Прошло два дня, а я все еще застрял в этом, помощь будет оценена по достоинству, сначала я объясню, что я пытаюсь сделать:
Я пытаюсь сделать приложение Django API, которое позволяет мне сохранять некоторые действия, которые я буду выполнять в браузере (веб-поиск, звонки, отправка сообщений и т.д.) и просматривать все это позже на моем собственном веб-сайте, для этого я сделал простое расширение chrome.
Я уже развернул веб-приложение в heroku, и оно работает нормально, когда защита CSRF отключена, но когда я добавляю эту защиту, я получаю ошибку 403, потому что: Origin checking failed - chrome-extension://theIDofMyExtension does not match any trusted origins.)
Я уже установил библиотеку django-cors-headers и произвел все необходимые настройки (это работало на моем собственном компьютере): https://pypi.org/project/django-cors-headers/
Я добавил в список CSRF_TRUSTED_ORIGINS происхождение chrome-extension следующим образом: CSRF_TRUSTED_ORIGINS = ['chrome-extension://nfbjppodghgcapmokljafeckhkmbcogd']
Я предполагаю, что это не работает, потому что эта ссылка: https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins говорит, что происхождение должно быть https или http, ссылка также говорит, что запрос должен иметь заголовок referer, который соответствует хосту происхождения, поэтому я добавил заголовок referer к запросу расширения chrome следующим образом:
let request = new Request(url, {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'text/plain',
'X-CSRFToken': value.csrftoken,
'X-Referer': 'tracking-leads.herokuapp.com',
},
body: JSON.stringify({
info: value,
}),
});
Я не знаю, что еще можно попробовать, так что даже если вы не уверены в ответе, я буду рад попробовать ваше решение, я действительно не хотел использовать csrf_excempt на любой запрос почты.
Спасибо за помощь.
Ну, я счастлив, потому что я решил свою собственную проблему, и я буду размещать то, что я сделал: В этом вопросе добавьте в ALLOWED_HOST в settings.py локальный домен, поэтому я попытался сделать то же самое, но добавив происхождение моего расширения chrome, и это сработало!
ALLOWED_HOSTS = ["your-domain.herokuapp.com","chrome-extension://theIDofYourExtension"]