hjalali
(Hossein Jalali)
31 Mayo, 2020 22:31
1
Tengo una función muy simple que “debería” funcionar, pero por alguna razón no lo hace. ¿Alguien puede ayudarme a entender qué estamos haciendo mal?
Seguimos obteniendo el error “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;
}
}
Por cierto, ya intenté mover la api_key y la api_username a la URL anterior como GET, pero no hubo diferencia.
1 me gusta
simon
31 Mayo, 2020 23:49
2
Necesitas incluir los valores de Api-Key y Api-Username en el encabezado de la solicitud. Hay un ejemplo con curl al final de este tema que podría ser útil: Sync DiscourseConnect user data with the sync_sso route .
5 Me gusta
hjalali
(Hossein Jalali)
1 Junio, 2020 00:16
3
¡Muchas gracias! Eso funcionó.
Para cualquier otra persona con el mismo problema:
$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) {
// Manejar el error, llamar a curl_close($ch) y retornar.
}
curl_close($ch);
$discourse_user = json_decode($result);
4 Me gusta
hjalali
(Hossein Jalali)
1 Junio, 2020 00:29
4
Solo para añadir a eso, si alguien necesita actualizar un “user_field”, reemplace $data con esto:
$data = ['user_fields' => ['1' => 'Algo'];
El número “1” corresponde al primer user_field que creé (ya que se asignan por número, no por nombre).
2 Me gusta
brospars
(Benoit Rospars)
5 Octubre, 2021 09:32
5
¿Desde cuándo es obligatorio?
No lo encontré en el registro de cambios. Creé una herramienta hace 2-3 años para crear categorías por lotes que funcionaba perfectamente y ahora me sale este error…
blake
(Blake Erickson)
5 Octubre, 2021 15:39
6
blake:
¡Advertencia de obsolescencia!
El 6 de abril de 2020, eliminamos el soporte para toda autenticación que no se base en encabezados HTTP (excepto algunas rutas de RSS, recepción de correos e ICS). Esto significa que las solicitudes a la API que incluyan api_key y api_username en los parámetros de consulta o en el cuerpo HTTP de la solicitud dejarán de funcionar pronto.
Disculpa cualquier problema que esto haya causado. Implementamos esta modificación de forma gradual y notificamos a los usuarios lo mejor que pudimos, pero es difícil detectar todos los casos de uso obsoletos.
2 Me gusta