Я развернул API с API-интерфейсом Django REST в локальном режиме. Мое мобильное приложение разработано с использованием Ionic framework (с AngularJS).Django и Angular POST запрос - CSRF не удалось
В моем приложении, когда я хочу, чтобы запросить (метод POST) в Ajax, у меня есть эта ошибка:
CSRF Failed: CSRF token missing or incorrect.
Я не получил эту ошибку, когда я просил в интегрированном проекте Django REST API.
Я исследовал решения в Интернете, но ни один из них не работал.
Информация о проекте:
Джанго файл settings.py:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'klipix.django-crossdomainxhr-middleware.OrganizationMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
я использовал метод TokenAuthentication (http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication). Мой django-crossdomainxhr-middleware.py файл:
class OrganizationMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
header_token = request.META.get('HTTP_AUTHORIZATION', None)
if header_token is not None:
try:
token = sub('Token ', '', request.META.get('HTTP_AUTHORIZATION', None))
token_obj = Token.objects.get(key = token)
request.user = token_obj.user
except Token.DoesNotExist:
pass
В моем приложении я попытался добавить это решение, но это не сработало:
angular.module('starter', ['ionic'])
.run(function($rootScope, $ionicPlatform, $http) {
$http.defaults.xsrfHeaderName = 'X-CSRFToken';
$http.defaults.xsrfCookieName = 'csrftoken';
.config(function($stateProvider, $urlRouterProvider, $httpProvider) {
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
Просьба предоставить ценные материалы для этого.
я получаю ту же ошибку. Как вы предоставили токен csrf в ионном приложении из django rest api? –
Ответ от @Jakob Runge является самым точным, пожалуйста, обратитесь к этому .... –