Иногда я не могу войти в свою заявку.Проверка подлинности Django: CSRF Failed
Проверка подлинности осуществляется с помощью API Django.
Но иногда она возвращает ошибку 403 с этим значением в результирующем объекте:
responseText: "{"detail":"CSRF Failed: CSRF token missing or incorrect."}"
И все же в моем приложении, у меня есть:
angular.module('app')
.config(function(ezLayoutProvider, $httpProvider) {
ezLayoutProvider.register(layoutName, {templateUrl: './main.html'});
ezLayoutProvider.setDefault(layoutName);
var getCookie = function(cookieName) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.substring(0, cookieName.length + 1) === (cookieName + '=')) {
cookieValue = decodeURIComponent(cookie.substring(cookieName.length + 1));
break;
}
}
}
return cookieValue;
};
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
$httpProvider.defaults.headers.common['X-CSRFToken'] = getCookie('csrftoken');
console.log($httpProvider.defaults.headers.common);
})
И консолей показывает маркер правильно перед тем, как попытаться войти в систему.
Странно то, что, как только я очищу свои файлы cookie и кеш из браузера, он работает.
Так что я предполагаю, что это как-то связано с сессией Джанго?
Вот кусок моего settings.py:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.DjangoModelPermissions',
),
}
REST_PROXY = {
'HOST': 'http://localhost:5000'
}
CORS_ORIGIN_ALLOW_ALL = True
AUTHENTICATION_BACKENDS = (
'auth.ldap.LDAPBackendFR',
'auth.ldap.LDAPBackendUS',
'auth.ldap.LDAPBackendHK',
'auth.ldap.LDAPBackendIN',
'django.contrib.auth.backends.ModelBackend',
)
Другой странный момент, является то, что он, кажется, работает также с:
Object {Accept: "application/json, text/plain, */*", X-Requested-With: "XMLHttpRequest", X-CSRFToken: null}
$httpProvider.defaults.headers.common
как.
Я просто заметил, что это произошло, когда я также был зарегистрирован в интерфейсе администратора, поэтому я предполагаю, что один toke приходит, удаляет другой токен. Таким образом, он работает, однако, если я также вошел в систему администратора, я не могу выйти из приложения. – Ellone