2015-08-04 18 views
10

Tôi cố gắng để tải lên một file image sử dụng vênh vang nó némCSRF thất bại trong khi tải lên các tập tin thông qua vênh vang

{ "chi tiết": "CSRF Không:. CSRF mã thông báo thiếu hoặc không chính xác" }

. Điều quan trọng cần đề cập đến là tôi đang sử dụng phiên bản django-rest-swagger 0.3.0 và django 1.7.

YAML để tải lên một bức tranh trông giống như:

parameters: 
    - name: image 
     in: formData 
     required: true 
     type: file 
    - name: caption 
     required: true 
     type: string 

Tôi không muốn sử dụng @csrf_exempt. Tôi đã cố gắng để vượt qua một tiêu đề vào điều này nhưng điều đó đã không làm việc. tiêu đề là cái gì đó như:

- name: X-CSRF-Token 
     description: csrftoken to be passed in header 
     in: header 
     required: true 
     type: string 

bất kỳ trợ giúp sẽ được đánh giá cao.

+1

Bạn có thẻ mã thông báo CSRF trong HTML của mình không? –

+0

Bạn có tìm ra vấn đề này không? Tôi đang gặp vấn đề giống hệt nhau. Nó chỉ là một vấn đề cho api có tải lên tập tin. Tất cả các điểm cuối api khác đều hoạt động tốt. –

+0

Tôi không biết nhiều điều đang diễn ra với việc vênh vang và yaml, nhưng điều tôi thấy là bạn đang truyền mã thông báo csrf làm tiêu đề. Nó chỉ cần được truyền với formdata.Tên: giá trị csrfmiddlewaretoken: lấy từ một trong hai cookie hoặc các hình thức đầu vào –

Trả lời

0

Thứ nhất, tôi không hiểu về vênh vang như vậy ..

nếu bạn đang sử dụng html và jquery vào xem front-end của bạn, bạn có thể sử dụng khi nào, gửi dữ liệu của bạn.

w.getCsrfToken = function() { 
    // Extract CSRF token from cookies 
    var cookies = document.cookie.split(';'), 
     csrf_token = null; 
    $.each(cookies, function (index, cookie) { 
     var cookieParts = $.trim(cookie).split('='); 
     if (cookieParts[0] === 'csrftoken') { 
      csrf_token = cookieParts[1]; 
     } 
    }); 
    return csrf_token; 
}; 
-1

loại bỏ các vấn đề csrv toàn bộ chỉnh sửa quan điểm

from django.views.decorators.csrf import csrf_protect 
from django.template import RequestContext 
from django.shortcuts import render_to_response 

@csrf_protect 
def any_function(request): 
    csrfContext = RequestContext(request) 
    return render_to_response('htmlpage', csrfContext) 
0

tôi đã cùng một vấn đề, nếu bạn được cập nhật với Django, nó chỉ là một tiêu đề đặt tên sai.

Sử dụng 'X-CSRFToken' thay vì 'X-CSRF-Mã thông báo', đã hoạt động đối với tôi.

0

Không biết khoảng vênh vang, nhưng khi sử dụng jquery ajax tôi luôn luôn sử dụng này:

$.ajaxSetup({ 
    data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, 
}); 

Hy vọng nó giúp

0

Acess CSRF thẻ trong mẫu.

{% csrf_token %} 

Truy cập mã thông báo đó trong mẫu JavaScript.

const token = $("input[name='csrfmiddlewaretoken']").val(); 

Bao gồm nó trong tiêu đề trước khi thực hiện cuộc gọi đến API.

headers:{'X-CSRFToken': token} 

Hy vọng nó sẽ giải quyết được lỗi.

Các vấn đề liên quan