API, curl, PHP로 PUT 실행 시 "BAD CSRF" 오류 발생

매우 단순한 함수인데 “동작해야” 하는데도 어떤 이유로든 작동하지 않습니다. 우리가 무엇을 잘못하고 있는지 이해하는 데 도움을 주실 수 있을까요?

계속해서 “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;
  }

}

참고로 이미 api_key와 api_username을 위의 URL에 GET으로 이동시켜 보았지만 차이가 없었습니다.

요청 헤더에 Api-Key와 Api-Username 값을 넣어야 합니다. 이 주제의 하단에 도움이 될 수 있는 curl 예제가 있습니다: Sync DiscourseConnect user data with the sync_sso route.

정말 감사합니다! 그 방법으로 해결되었습니다.

같은 문제를 겪고 있는 분들을 위해:

$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 ) {
   // 에러 처리, curl_close( $ch ) 호출 후 반환.
}

curl_close( $ch );

$discourse_user = json_decode( $result );

추가로, 누군가가 "user_field"를 업데이트해야 한다면 $data를 다음과 같이 대체하세요:

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

여기서 숫자 "1"은 제가 만든 첫 번째 user_field를 나타냅니다(이름이 아닌 번호로 할당되므로).

언제부터 필수 항목이 된 건가요?
변경 사항에 그런 내용은 찾아볼 수 없었습니다. 2~3년 전에 카테고리를 일괄 생성하는 도구를 만들었는데 그때는 완벽하게 잘 작동했는데, 지금은 이 오류가 나네요…

이로 인해 발생한 문제에 대해 죄송합니다. 이 변경 사항을 점진적으로 적용하고 최대한 공지했지만, 모든 비추천 사용 사례를 파악하는 것은 어려운 일입니다.