Как мне добавить токен csrf в мой $ .destroy - в Rails 3 и Javascript - PullRequest
1 голос
/ 21 апреля 2011

Так что это связано с другим вопросом SO ( Почему действие уничтожения вызывает HTTP-аутентификацию в Production в Rails 3? ), который, я думаю, лежит в основе этой проблемы, но не уверен, как это сделать..

Видимо, моему $.destroy() не передается необходимый токен CSRF.

Но я не уверен, как его включить.

Это мой JS:

var compv = {
    exists: true,
    tools: {
        exists: true,
        csrf_param: null,
        csrf_token: function() { },
        clientError: function() { }
    },
    comments: {
        exists: true,
        updateView: null,
        selectImage: null,
        upvote: null,
        edit: null,
        cancelEdit:null,
        downvote: null,
        showVotes: null,
        destroy: {
            success: null,
            error: null,
            dialog: 'comment-destroy-dialog'
        },
        getUploadID: function(element) {
            return $(element).parents("li").attr("data-upload-id");
        }
    },
    steps: {
        exists: true,
        selectFn: {},
        selectedClass: "selected-step",
        selectableClass: "selectable-step",
        selectedClient: {
            element: null,
            id: null,
            stepType: "client",
            ajaxSuccess: null
        },
        selectedProject: {
            element: null,
            id: null,
            stepType: "project",
            ajaxSuccess: null
        },
        selectedStage: {
            element: null,
            id: null,
            stepType: "stage",
            ajaxSuccess: null,
            getID: function() {
                return compv.steps.selectedStage.id;
            },
            displayCompare: function() {
                window.open($(this).attr('data-url'), "_blank");
            }
        },
        selectedUpload: {
            element: null,
            id: null,
            stepType: "image",
            primeUploadDisplay: null,
            ajaxSuccess: null,
            uploader: null,
            noCloseDialog: false
        }
    }
};

compv.tools.csrf_param = function(){
    return $('meta[name=csrf-param]').attr('content');
};

compv.tools.csrf_token = function(){
    return $('meta[name=csrf-token]').attr('content');
};

Это мой $.destroy()

$.destroy({
    url: element.attr('data-destroy-url'),
    success: mapping.success
});

Учитывая, что я получаю соответствующие метаданные csrf в вышеприведенных функциях, как мне затем передать их в .destroy ()?

Я пытался добавить compv.tools.csrf_token, но я получил ошибку, что compv не определено.То же самое произошло, когда я compv.tools.csrf_token().

Мысли?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2011

Бросьте результаты ваших функций csrf в объект и передайте этот объект в атрибут данных. По крайней мере, это работало для меня в прошлом.

    var data = {};
    data[compv.tools.csrf_param()] = compv.tools.csrf_token();
    $.destroy({
      url: element.attr('data-destroy-url'),
      success: mapping.success,
      data: data
    });
0 голосов
/ 21 апреля 2011

Посмотрите на handleMethod в public/javascripts/rails.js, который включен в Rails (или в версии jQuery здесь ) - оба покажут вам, как Rails включает токен.

Если вы хотите использовать свой собственный destroy звонок, то вам нужно сделать это самостоятельно.

...