Я пытаюсь получить работу CSRF с ajax в моем приложении CI 2.1.Не удалось получить CSRF для работы с ajax (CI 2.1)
я искал об этом и нашел несколько Guidlines, но couln't решить проблему http://ericlbarnes.com/post/10728867961/codeigniter-csrf-protection-with-ajax http://www.beheist.com/index.php/en/blog/csrf-protection-in-codeigniter- 2-0-а-ближе-смотрите 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, чтобы ASync позвонить
<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.
например: имя пользователя = корень & пароль = корень & csrf_token_name = 31961f17de5fa2df657ab1aba880f718
Как всегда, если я удалил CSRF, AJAX запрос работает нормально, и я получаю 200 в ответ
Может кто-нибудь мне помочь, пожалуйста, ?
Ничего, разобрался. Я должен использовать имя токена вместо csrf_token_name в js-файле. token01: $ ("input [name = token01]"). Val() – ranilchaminda
Пожалуйста, добавьте это как ответ на вопрос и примите его, чтобы удалить этот вопрос из неотвеченного стека. – PaulSkinner