hjalali
(Hossein Jalali)
1
매우 단순한 함수인데 “동작해야” 하는데도 어떤 이유로든 작동하지 않습니다. 우리가 무엇을 잘못하고 있는지 이해하는 데 도움을 주실 수 있을까요?
계속해서 “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으로 이동시켜 보았지만 차이가 없었습니다.
simon
2
요청 헤더에 Api-Key와 Api-Username 값을 넣어야 합니다. 이 주제의 하단에 도움이 될 수 있는 curl 예제가 있습니다: Sync DiscourseConnect user data with the sync_sso route.
hjalali
(Hossein Jalali)
3
정말 감사합니다! 그 방법으로 해결되었습니다.
같은 문제를 겪고 있는 분들을 위해:
$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 );
hjalali
(Hossein Jalali)
4
추가로, 누군가가 "user_field"를 업데이트해야 한다면 $data를 다음과 같이 대체하세요:
$data = ['user_fields' => ['1' => 'Something']];
여기서 숫자 "1"은 제가 만든 첫 번째 user_field를 나타냅니다(이름이 아닌 번호로 할당되므로).
brospars
(Benoit Rospars)
5
언제부터 필수 항목이 된 건가요?
변경 사항에 그런 내용은 찾아볼 수 없었습니다. 2~3년 전에 카테고리를 일괄 생성하는 도구를 만들었는데 그때는 완벽하게 잘 작동했는데, 지금은 이 오류가 나네요…
blake
(Blake Erickson)
6
이로 인해 발생한 문제에 대해 죄송합니다. 이 변경 사항을 점진적으로 적용하고 최대한 공지했지만, 모든 비추천 사용 사례를 파악하는 것은 어려운 일입니다.