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
quelle
Das Problem war auf einen Fehler im Rest UI-Modul v.1.13 für D8 zurückzuführen.
Zum Zeitpunkt des Schreibens ist das Problem auf dem Modul nicht behoben, es gibt jedoch eine Problemumgehung.
Um das Problem zu umgehen, müssen aus der Rest-Benutzeroberfläche exportierte Konfigurationen unter "Authentifizierung" angepasst werden.
Weitere Informationen finden Sie hier: https://www.drupal.org/node/2831716#comment-11813802
quelle