Ich habe eine Site, auf der ein benutzerdefiniertes Formular in einem Modal geöffnet ist, und ruft beim Senden eine Ajax-Funktion zum POST an einen REST-Service auf, um einen Knoten zu erstellen.
Das Problem ist, dass ich bei der Einreichung immer wieder die Antwort "Verboten" erhalte.
Ich möchte nur, dass angemeldete Benutzer diese Ajax-Anforderungen senden können und die Authentifizierung für jeden Benutzer ein anderes Token sein sollte.
Hier ist mein Code:
$('#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);
}
});
}
Wenn ein Test in POSTMAN ausgeführt wird, ist er erfolgreich, aber die Authentifizierung war dort etwas anders:
Wie Sie auf dem Bild sehen können, wird bei Verwendung von POSTMAN 201 erstellt.
Ich glaube, das hat mit dem CSRF-Token zu tun, das in der Javascript-Implementierung verwendet wird. Ich bin mir nicht sicher, welche Authentifizierungsmethode ich verwenden soll, wenn ich über JS auf dieselbe Site poste.
Ich habe die Informationen hier verwendet .
Ich habe einen Fehlerbericht erstellt, da die CSRF-Token-Prüfung anscheinend erfolgreich bestanden wurde und Zugriff gewährt, der Zugriff jedoch von einem anderen Ort aus verweigert wird. Problem # 2831251 Der Versuch, Knoten über REST mit einer Ajax-POST-Anforderung zu erstellen, gibt eine 403-Antwort zurück