hjalali
(Hossein Jalali)
31. Mai 2020 um 22:31
1
Ich habe eine sehr einfache Funktion, die „funktionieren sollte", aber aus irgendeinem Grund tut sie es nicht. Kann mir jemand helfen zu verstehen, was wir falsch machen?
Wir erhalten ständig den Fehler „BAD CSRF".
public function changeName()
{
$url = 'https://www.website.com/{username}.json';
$data = ['name' => 'James', 'api_key' => DISCOURSE_API, 'api_username' => 'system'];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:multipart/form-data'));
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
echo $response = curl_exec($ch);
if (!$response)
{
return false;
}
}
Übrigens habe ich bereits versucht, api_key und api_username als GET-Parameter in die URL oben zu verschieben, aber das hat nichts geändert.
simon
31. Mai 2020 um 23:49
2
Sie müssen die Werte für Api-Key und Api-Username in den Request-Header aufnehmen. Gegen Ende dieses Themas finden Sie ein hilfreiches curl-Beispiel: Sync DiscourseConnect user data with the sync_sso route .
hjalali
(Hossein Jalali)
1. Juni 2020 um 00:16
3
Vielen Dank! Das hat funktioniert.
Für alle anderen mit demselben Problem:
$url = 'https://www.website.com/{username}.json';
$data = ['name' => 'George'];
$api_key = CUSTOM_DISCOURSE_API;
$headers = array("Content-Type: multipart/form-data;", "Api-Key: $api_key", "Api-Username: system");
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$result = curl_exec( $ch );
if ( curl_errno( $ch ) !== 0 ) {
// Fehler behandeln, curl_close( $ch ) aufrufen und zurückkehren.
}
curl_close( $ch );
$discourse_user = json_decode( $result );
hjalali
(Hossein Jalali)
1. Juni 2020 um 00:29
4
Nur noch als Ergänzung: Wenn jemand ein „user_field
brospars
(Benoit Rospars)
5. Oktober 2021 um 09:32
5
Seit wann ist das verpflichtend? Ich habe es im Changelog nicht gefunden. Ich habe vor 2–3 Jahren ein Tool erstellt, um Kategorien im Batch zu erstellen, das einwandfrei funktionierte, und jetzt erhalte ich diesen Fehler…
blake
(Blake Erickson)
5. Oktober 2021 um 15:39
6
blake:
Veraltungs-Warnung!
Am 6. April 2020 haben wir die Unterstützung für alle Authentifizierungsmethoden außer HTTP-Headern eingestellt (mit Ausnahme einiger Routen für RSS, E-Mail-Empfänger und ICS). Das bedeutet, dass API-Anfragen, die einen api_key und einen api_username in den Query-Parametern oder im HTTP-Body der Anfrage enthalten, bald nicht mehr funktionieren werden.
Es tut uns leid, falls dies Probleme verursacht hat. Wir haben diese Änderung schrittweise eingeführt und die Nutzer so gut wie möglich informiert, aber es ist schwierig, jeden Fall der Veraltung zu erfassen.