我正在尝试让CSRF在我的CI 2.1应用程序中使用ajax。
我已经搜索过这个并找到了一些指导,但是无法解决问题 http://ericlbarnes.com/post/10728867961/codeigniter-csrf-protection-with-ajax http://www.beheist.com/index.php/en/blog/csrf-protection-in-codeigniter-2-0-a-closer-look http://aymsystems.com/ajax-csrf-protection-codeigniter-20
我在配置
中为两个令牌值设置了两个不同的令牌$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'token01';
$config['csrf_cookie_name'] = 'token02';
$config['csrf_expire'] = 7200;
以下是我的观点,我使用的是form_open
<?php echo form_open("http://localhost/pis/user"); ?>
<div id="inputs">
<?php echo form_input($username);?>
<?php echo form_password($password);?>
</div>
<div id="actions">
<div style="float:left"><?php echo form_submit($submit);?>
<!-- <input type="button" value="Login" id="submit" name="submit" onclick="clicksubmit()" /> -->
</div>
</div>
<?php echo form_close();?>
我正在使用此javascript进行异步调用
<script type="text/javascript">
$(document).ready(function(){
$("#submit").click(
function(){
var form_data = {
username: $("#username").val(),
password: $("#password").val(),
csrf_token_name: $("input[name=token01]").val()
};
$.ajax({
type: "POST",
url: "http://localhost/pis/user",
data: form_data,
success:
function(data){
$("#debug").html(data.message).css({'background-color' : data.bg_color}).fadeIn('slow');
}
});
return false;
});
});
</script>
当我运行此操作时,我收到“500内部服务器错误”以及“遇到错误,不允许您请求的操作”作为响应。 Firebug正确显示POST数据参数。
例如:username = root&amp; password = root&amp; csrf_token_name = 31961f17de5fa2df657ab1aba880f718
如果我删除了csrf,ajax请求运行正常,我得到200作为响应
有人可以帮我吗?
答案 0 :(得分:0)
更好的是,您可以让jQuery为您序列化表单数据:
var form_data = $(this).serialize();
这样您就不必担心重命名的输入或添加更多字段。