Tôi có một trang web trong đó một biểu mẫu tùy chỉnh được mở theo phương thức và khi được gửi sẽ gọi hàm ajax đến POST cho dịch vụ REST để tạo nút.
Vấn đề là tôi tiếp tục nhận được phản hồi "Cấm" khi nộp.
Tôi chỉ muốn người dùng đã đăng nhập có thể gửi các yêu cầu ajax này và auth phải là mã thông báo khác nhau cho mỗi người dùng.
Đây là mã của tôi:
$('#create-node-submit').click(function(e) {
e.preventDefault();
var newNode = {
_links: {
type: {
href: 'http://mysite.dev/rest/type/node/article'
}
},
type: {
target_id: 'article'
},
title: {
value: 'This is a test Article from REST'
},
field_description: {
value: 'Here is some test description.'
}
};
getCsrfToken(function (csrfToken) {
postNode(csrfToken, newNode);
});
return false;
});
function getCsrfToken(callback) {
$.get(Drupal.url('rest/session/token'))
.done(function (data) {
var csrfToken = data;
callback(csrfToken);
});
}
function postNode(csrfToken, node) {
$.ajax({
url: 'http://mysite.devdev/entity/node?_format=hal_json',
method: 'POST',
headers: {
'Content-Type': 'application/hal+json',
'X-CSRF-Token': csrfToken
},
data: JSON.stringify(node),
success: function (node) {
console.log(node);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Status: " + textStatus);
console.log("Error: " + errorThrown);
}
});
}
Khi chạy thử nghiệm trong POSTMAN, nó thành công, nhưng xác thực hơi khác ở đó:
Như bạn có thể thấy trong hình, tôi nhận được 201 được tạo khi sử dụng POSTMAN.
Tôi tin rằng nó có liên quan đến mã thông báo CSRF đang được sử dụng trong triển khai Javascript. Tôi không chắc chắn nên sử dụng phương thức xác thực nào khi đăng lên cùng một trang thông qua JS.
Tôi đã sử dụng thông tin ở đây .
Tôi đã tạo một báo cáo lỗi vì có vẻ như kiểm tra mã thông báo CSRF đã vượt qua thành công và cấp quyền truy cập, nhưng quyền truy cập bị từ chối từ một nơi khác. Vấn đề # 2831251 Cố gắng tạo các nút thông qua REST với yêu cầu POST ajax trả về 403 phản hồi