Я читал, что и csrfmiddlewaretoken, и файл cookie csrftoken должны иметь правильное значение для успешного выполнения запроса POST django (django: csrftoken COOKIE и значение HTML-формы csrfmiddlewaretoken). Это касается меня, но я все еще получаю 403:
В хромированной консоли:
document.cookie
возвращается
"csrftoken=Wt9eeJop5Vb3OmeNTvogegckm1pVM5MD"
но
$.get('https://learningdollars.fwd.wf/csrftoken/', function(data){
console.log(data)
token = $.parseHTML(data)[0].value
console.log(token)
$.ajax({
type: "POST",
url: 'https://learningdollars.fwd.wf/confirmemail/',
data: {email: '[email protected]', csrfmiddlewaretoken: token},
contentType: "application/json"
})
.done(function(response) {
console.log('done!')
})
.fail(function(error) {
console.log('fail!')
})
})
возвращается
> Object {readyState: 1, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
> <input type='hidden' name='csrfmiddlewaretoken' value='Wt9eeJop5Vb3OmeNTvogegckm1pVM5MD' />
> Wt9eeJop5Vb3OmeNTvogegckm1pVM5MD
> POST https://learningdollars.fwd.wf/confirmemail/ 403 (Forbidden)
> fail!
У меня есть
'django.middleware.csrf.CsrfViewMiddleware',
активирован в моем промежуточном программном обеспечении django.
Мой корневой urls.py содержит:
url(r'^csrftoken/$', views.get_csrf_token),
url(r'^confirmemail/$', views.confirm_email, name='confirm_email'),
И мои взгляды таковы:
def get_csrf_token(request):
c = {}
c.update(csrf(request))
print c
return render_to_response('csrf.html', c)
def confirm_email(request):
print 'here'
return JsonResponse({'response': 0})
И, кстати, содержимое csrf.html — это просто csrftoken (внутри входного тега):
{% csrf_token %}
Что я делаю не так?