Я попытался реализовать codeigniter с помощью $config['csrf_regenerate'] = TRUE
;
Я создаю код с объединением javascript XMLHttpRequest & Jquery $ .ajaxPrefilter.
Я создаю функцию для получения новых csrf_hash
от Codeigniter и добавьте мета-имя на HTML head.
При первом запросе все кажется работающим. Но при следующем запросе получено сообщение 403 Запрещено, потому что ajax отправьте старый файл csrf ha sh.
Пожалуйста, исправьте мой код.
Я хочу перед отправкой запроса POST ajax получить новый csrf ha sh мета-имя формы на HTML голове.
Извините за мой плохой английский sh.
С наилучшими пожеланиями,
Это мой код
$.ajaxPrefilter(function( options, originalOptions, jqXHR )
{
get_csrf_hash(callback => document.querySelector('meta[name="csrf_hash"]').setAttribute("content", callback) ); // It Work!!.. Get new csrf_hash and update content meta name.
if (options.type.toLowerCase() === "post")
{
options.data = $.param($.extend(originalOptions.data, { csrf_simpeg_v2 : document.querySelector('meta[name="csrf_hash"]').getAttribute("content")})); // Not Work didn't send fresh csrf hash
}
var originalSuccess = options.success;
options.success = function(data)
{
if (originalSuccess != null)
{
originalSuccess(data);
}
}
var originalError = options.error;
options.error = function (jqXHR, textStatus, errorThrown)
{
console.log(jqXHR.status + ' ' + jqXHR.statusText);
if(jqXHR.status == 401 || jqXHR.status == 403)
{
alert(jqXHR.status + ' ' + jqXHR.statusText);
}
else
{
if(originalError != null)
{
originalError();
}
}
};
});
function get_csrf_hash(callback)
{
var url = baseURL + 'login/get_csrf_token';
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if (xhr.readyState == XMLHttpRequest.DONE)
{
console.log(xhr.responseText);
return callback(xhr.responseText);
}
}
xhr.open('GET', url, true);
xhr.send(null);
}
$(function () {
});