Trac错误。表单令牌丢失或无效。你有启用cookie吗?

时间:2014-01-18 21:02:54

标签: ajax post cookies trac

我正在为Trac开发一个插件并尝试向数据库提交一些信息

该计划是:

  1. 检查要添加到部门的用户
  2. 单击按钮发出ajax POST请求
  3. 处理请求。
  4. 当我使用旧的0.11版本时,一切都很好。 (不确定是不是这个原因。

    该公司我一直在更新Trac工作到目前稳定的1.0.1版本,现在出现了一些问题。

    在没有任何数据的情况下发送POST请求:

    $.post("trac_dep_policy");

    很好,但如果我尝试添加一些数据:

    $.post("trac_dep_policy", { name: "John", time: "2pm" } );

    我收到400 Bad Request错误。 经过一些调试后,我发现它是针对我的CSRF攻击的保护。 (网络/ main.py)

    问题很简单 - 我该如何处理?

2 个答案:

答案 0 :(得分:1)

CSRF保护是auto-added to each form,结合了就地Genshi模板修改和POST请求的回读,我知道这已经在Trac 0.10.2发布中很早就添加了修复版本以便清楚

您需要使用XMLRPC协议(请参阅XMLRPC plugin)或自行阅读隐藏的表单令牌。

答案 1 :(得分:0)

答案很简单:

就像@hasienda在他的回答中提到的那样 - 在Trac中的每个表单都在div元素中提供了隐藏输入,其中包含某个name标记和一个标记value

<form>
    <div>
        <input type="hidden" name="__FORM_TOKEN" value="9c69c37f52f669fb99b095e4">
    </div> 
</form>

现在,通过ajax成功发布POST请求所需的一切就是将此__FORM_TOKEN值与您的数据一起传递:

var token_value = $("input[name=__FORM_TOKEN]").val();
$.post(url, {__FORM_TOKEN: token_value, data: your_data})