"BAD CSRF" beim Ausführen von PUT mit API, curl und PHP

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.

1 „Gefällt mir“

You need to put the Api-Key and Api-Username values in the request header. There’s a curl example near the end of this topic that could be helpful: Sync SSO user data with the sync_sso route.

5 „Gefällt mir“

Thanks a lot! That did the trick.

For anyone else with the same 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 ) {
   // Handle error, call curl_close( $ch ) and return.
}

curl_close( $ch );

$discourse_user = json_decode( $result );
4 „Gefällt mir“

Just to add to that, if someone needs to update a “user_field” replace the $data with this:

$data = ['user_fields' => ['1' => 'Something']];

The number “1” being the first user_field I created (as they are assigned by number not name).

2 „Gefällt mir“

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…

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.

2 „Gefällt mir“