Tôi đang làm việc trên ứng dụng Laravel 5 có tính năng bảo vệ CSRF được bật theo mặc định cho tất cả các yêu cầu POST. Tôi thích bảo mật này vì vậy tôi đang cố gắng làm việc với nó.
Trong khi thực hiện yêu cầu $.post()
đơn giản, tôi đã nhận được lỗi 'Illuminate\Session\TokenMismatchException'
do dữ liệu POST bị thiếu dữ liệu POST trong biểu mẫu yêu cầu nhập _token
. Dưới đây là một ví dụ về một yêu cầu $ .post trong câu hỏi:
var userID = $("#userID").val();
$.post('/admin/users/delete-user', {id:userID}, function() {
// User deleted
});
Tôi đã CSRF token tôi được lưu trữ như một lĩnh vực meta trong phần đầu của tôi và có thể dễ dàng truy cập nó bằng cách sử:
var csrf_token = $('meta[name="csrf-token"]').attr('content');
Có thể để thêm dữ liệu này vào dữ liệu json trên tất cả các yêu cầu gửi đi $.post()
? Tôi đã thử sử dụng tiêu đề nhưng Laravel dường như không nhận ra chúng -
var csrf_token = $('meta[name="csrf-token"]').attr('content');
alert(csrf_token);
$.ajaxPrefilter(function(options, originalOptions, jqXHR){
if (options['type'].toLowerCase() === "post") {
jqXHR.setRequestHeader('X-CSRFToken', csrf_token);
}
});
Tôi có một cách chính xác hiểu rằng bạn muốn làm cho đối tượng dữ liệu của bạn có một '_token' lĩnh vực? (ví dụ: một số thứ như 'tùy chọn ['dữ liệu'] ._ token = csrf_token'?) Một ví dụ đơn lẻ về yêu cầu làm việc sẽ hữu ích nếu bạn có. – apsillers
Có, chính xác ... – NightMICU
Để thực hiện yêu cầu, tôi sẽ phải thêm mã thông báo trực tiếp vào dữ liệu bài đăng - vì vậy '{id: userID, '_token': token}' – NightMICU