Настройка ng-потока CSRF-токен в заголовке
Я не смог найти способ установить заголовок X-XSRF-TOKEN при использовании загрузки файлов с помощью flow.js.
Так как flow.js не использует ресурс $http для размещения файлов, мне нужно явно установить заголовок.
Вот что сделал:
profile.edit.html:
<div class="row" flow-init="{target: 'rest/account/uploadImage'}"
flow-file-added="processFiles($file, $event, $flow)"
flow-files-submitted="$flow.upload()" >
...
<img type="file" flow-btn ng-if="$flow.files.length" flow-img="$flow.files[$flow.files.length-1]" class="img-circle m-t-xs img-responsive" />
</div>
controller.js:
function profileCtrl($rootScope, $scope, $http, $location, $window, $cookies, toaster,
$scope.processFiles = function(file, event, flow) {
flow.defaults.headers = function(file, chunk, isTest) {
return {
'X-CSRFToken': $cookies.get("csrftoken")
};}
Но, к сожалению, ничего не установлено. Есть идеи?
Ура!
1 ответ
Решение
Flow.js не использует службу $http, поэтому для каждого запроса необходимо вручную установить токен csrf.
Так должно быть:
<div flow-init="{headers: {'XCSRF-TOKEN': csrf}}">
</div>
Или же:
HTML-файл:
<div flow-init="setToken();">
...
</div>
JS файл:
function profileCtrl($rootScope, $scope, $http, $location, $window, $cookies, toaster){
$scope.setToken = function() {
$scope.options = {
headers: {
'X-CSRFToken': $cookies.get("csrftoken");
}
};
}
}
ИЛИ ЖЕ:
HTML-файл:
<div flow-init flow-files-submitted="uploadFiles($files, $event, $flow);"
flow-file-added="!!{png:1,gif:1,jpg:1,jpeg:1}[$file.getExtension()]"
flow-name="flow" flow-upload-started="uploadStart($flow);"
flow-file-success="fileUploadSucces($file, $message)"
flow-complete="fileUploadsComplete();">
....
</div>
Файл JS:
function profileCtrl($rootScope, $scope, $http, $location, $window, $cookies, toaster){
$scope.uploadStart = function($flow){
$flow.opts.target = "rest/account/uploadImage";
$flow.opts.headers = {'X-CSRFToken' : $cookies.get("csrftoken")};
}
$scope.fileUploadSucces = function($file, $message){
//Upload Success
};
$scope.fileUploadsComplete = function(){
//Complated Upload
};
$scope.uploadFiles = function($file, $message, $flow){
//Uploading
$rootScope.$flow = $flow;
$rootScope.$flow.upload();
};
}