簡體   English   中英

我如何將CSRF令牌添加到$ .destroy中-在Rails 3和Javascript中

[英]How do I add my csrf token to my $.destroy - in Rails 3 & Javascript

因此,這與另一個SO問題( 為什么在Actions in Rails 3中銷毀動作會觸發HTTP身份驗證? )有關,我認為這是該問題的核心,但不確定如何執行。

顯然我的$.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()時,發生了同樣的事情。

有什么想法嗎?

看一下handleMethodpublic/javascripts/rails.js (或此處的jQuery版本 )中的handleMethod -兩者都將向您展示Rails如何包括令牌。

如果您想使用自己的自定義destroy調用,則需要自己進行此操作。

將csrf函數的結果放入一個對象中,然后將該對象傳遞到data屬性中。 至少在過去,這對我有用。

    var data = {};
    data[compv.tools.csrf_param()] = compv.tools.csrf_token();
    $.destroy({
      url: element.attr('data-destroy-url'),
      success: mapping.success,
      data: data
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM