Cześć,
Ostatnio stworzyłem alert (info o cookies), działał on normalnie.. tzn. gdy nowy użytkownik wchodzi na stronę, wyskakuję mu alert zamyka go 'iksem', i odrazu wysyłam wiadomość do PHP za pomocą ajax'a i PHP tworzy odpowiedni cookie.
Problem w tym że zaimplementowałem do strony CSRF protection i teraz gdy dane się wysyłają po kliknięciu X, wywala response 404 valid csrf.. co jest logiczne. Ale mam problem z wysłaniem owego csrf za pomocą ajaxa.
Próbowałem zrobić takie coś (znalazłem jakiś randomowy poradnik na necie)
<!-- CSRF Tokens -->
<div class="js-csrf-token" style="display:none;" data-csrf-token-name="X-{{ csrf_name() }}" data-csrf-token-value="{{ csrf_token() }}"></div>
<!-- Accept cookies by user -->
<script type="text/javascript">
function getCsrfToken() {
const csrfTokenNode = document.getElementsByClassName('js-csrf-token')[0];
return {
name: csrfTokenNode.getAttribute('data-csrf-token-name'),
value: csrfTokenNode.getAttribute('data-csrf-token-value')
}
}
console.log(getCsrfToken());
const csrfToken = getCsrfToken();
$(function () {
$(".uk-alert-close").on("click", function(e) {
$.ajax({
url: '{{ base_url() }}/cookies/info',
method : "POST",
cache: false,
dataType : "xml",
beforeSend: function(request) {
request.setRequestHeader(csrfToken.name, csrfToken.value);
},
data : {
accept: true
}
})
.done(function() {
})
.always(function() {
});
});
});
</script>
I pomysł był taki żeby wysłać to jako Header requestu ajaxa (?), no i to nie działa.. w sensie gdy sprawdzam header i jego zawartość się wysyła, działa, ale nadal wywala response z valid csrf.
Ogólnie bym potrafił do zrobić, ale nie do końca wiem na czym polega wysyłanie tych tokenów i jak one działają. Ma ktoś jakiś pomysł jak to mogę zaimplementować żeby przez Ajax'a (i jQuery) mogę to wysłać?
A i dodam że csrf zaimportowałem od slim'a bo stronę właśnie robię w slim'ie (php).
Z góry dziękuję!