La última actualización de WP-Discourse está causando un comportamiento inesperado

El último commit del plugin WP-Discourse está haciendo que todas las publicaciones personalizadas (creadas a través del plugin EventON) se atribuyan al usuario system, a pesar de que el usuario existe tanto en Discourse como en WordPress.

Si revertimos a la versión 2.3.7, funciona como se esperaba, pero al actualizar a la 2.3.8 ocurre este error.

Recibimos este error por correo electrónico:

Motivo del fallo:
 Se devolvió un código de respuesta 400 desde Discourse.
 falta el parámetro o el valor está vacío: post
 ¿Quisiste decir? post
        post[raw]
        controller
        title

Pensé que podría ser útil para identificar la causa probable.

Hola, ¿podrías compartir un enlace al plugin al que te refieres? ¿También estás viendo algo en los registros de WP Discourse?

Hola @angus

Aquí tienes el plugin: https://www.myeventon.com/

¿Necesitas los registros de la v2.3.7 o de la v2.3.8 del plugin?

1 me gusta

Ambos si es posible. Por favor, active los registros de publicación detallados.

v2.3.7:

[2022-02-21 08:07:11] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 
[2022-02-21 08:07:11] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 

La publicación se vinculó correctamente a mi cuenta de usuario tanto en WordPress como en Discourse con la versión 2.3.7.

v2.3.8:

[2022-02-21 08:10:15] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 
[2022-02-21 08:10:15] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 

La publicación se vinculó a mi usuario en WordPress y al usuario del sistema en Discourse en la versión 2.3.8.

1 me gusta

¿Puedes confirmarme algunas cosas?

  1. Tus tipos de publicación personalizados (es decir, los eventos) se publican correctamente en Discourse.
  2. No has visto el error 400 antes.
  3. ¿Qué tipo de usuarios (cuyos nombres de usuario de Discourse esperas que se utilicen) están publicando? (es decir, ¿son administradores o no?)
  4. ¿Qué tipo de clave API estás utilizando para conectar WordPress a Discourse?

Sí, las publicaciones se publican correctamente pero el usuario incorrecto (sistema) está siendo atribuido con v2.3.8

No, no hemos visto ningún error 400 en versiones anteriores del plugin wp-discourse.

Estos usuarios son usuarios registrados no administradores en WordPress y hasta ahora nos ha funcionado. cualquier usuario estaba correctamente vinculado en Discourse.

Es una clave API global

1 me gusta

Cuando se fusione esta PR (y la versión se envíe a Wordpress.org), la funcionalidad funcionará como esperas.

2 Me gusta

Estoy experimentando el mismo error y puedo confirmar que comenzó después de actualizar WP Discourse a la versión 2.3.8.

Con esta versión, los temas se crean, pero con el usuario predeterminado.

Para confirmar, revertí WP Discourse a 2.3.7 y está funcionando de nuevo.

2 Me gusta

Gracias, se abordará cuando se fusione el PR. ¿Podrías confirmar también estas dos preguntas?

  • ¿Qué tipo de usuarios (cuyos nombres de usuario de Discourse se espera que se utilicen) están publicando las publicaciones (es decir, ¿son administradores o no?)
  • ¿Qué tipo de clave API estás utilizando para conectar WordPress a Discourse?

Mismo problema aquí. No es un tipo de publicación personalizado.

no es un usuario administrador, sino un moderador
Una clave API “todos los usuarios”.

  • Los usuarios son moderadores y algunos administradores
  • API “Todos los usuarios”

Hola a todos, la versión 2.3.9 ya está disponible con una solución para este problema. Por favor, actualicen y cuéntenme cómo les va.

1 me gusta

Estamos viendo el mismo problema con la versión 2.3.9 y estamos revirtiendo a la 2.3.7, y deshabilitando la actualización automática de este plugin en el futuro.

1 me gusta

Hola @angus

Disculpa el ruido, mi problema parece haberse solucionado en WordPress 5.9.1 y WP Discourse 2.3.9.

Pero, parece que Discourse ahora está haciendo un trabajo adicional en cada publicación y la propiedad se está transfiriendo del usuario del sistema al usuario que publica después del hecho.

1 me gusta

Hola @orenwolf, lamento saber que todavía tienes un problema. ¿Podrías confirmar que los usuarios que esperas que publiquen con su propio nombre tienen un Nombre de usuario de Discourse en su perfil de Wordpress?


En general, gracias por su paciencia. En mis propias pruebas en varios sitios (y en las pruebas unitarias del propio plugin), la función Nombre de usuario de Discourse ahora funciona como se esperaba en 2.3.9. Si todavía tienes un problema, confirma que tienes la última versión del plugin y que el usuario que esperas que sea el autor de la publicación tiene un Nombre de usuario de Discourse.

Quizás te preguntes por qué surgió este problema. Creo que será útil si doy un poco de contexto (que también responderá a tu pregunta @itsbhanusharma). Anteriormente, la forma en que funcionaba esta función era utilizando diferentes usuarios en la cabecera Api-Username (ver aquí). La razón por la que esto se consideró necesario fue porque el punto final relevante en Discourse no admite el establecimiento de un creador de la publicación diferente del usuario que realiza la solicitud de API.

El resultado de esto fue que la única forma en que esta función funcionaría es si tienes una clave de API de “Todos los usuarios” con un ámbito “Global”. Solo señalaré que durante algún tiempo las instrucciones estándar para crear una clave de API para el plugin WP Discourse son las siguientes:

Si aún no has creado una clave de API, haz clic en ‘Nueva clave de API’, establece el Nivel de usuario en ‘Usuario único’, establece ‘Usuario’ en una cuenta de administrador, selecciona ‘Clave global’ y haz clic en ‘Guardar’. Copia y pega la clave de API aquí.

Seguir estas instrucciones significaría que esta función (no documentada) no funcionaría, y ha causado problemas en varios sitios.

Además, por varias razones de seguridad, he estado realizando cambios progresivos en el plugin para permitir el uso de claves de API mucho más específicas. Esto requerirá un cambio en Discourse y (cuando se fusione) permitirá a los administradores del plugin emitirse una nueva clave de API mucho más limitada. Haré un anuncio sobre eso cuando llegue el momento.

@itsbhanusharma, la forma en que funciona la función ahora es realizando una segunda solicitud para cambiar el propietario de la publicación después de que se crea (si está presente un Nombre de usuario de Discourse). Esa es, de hecho, la única forma adecuada de establecer arbitrariamente el propietario de una publicación a través de la API de Discourse (sin necesidad de usar Api-Username y una Clave Global de Todos los Usuarios de la manera descrita anteriormente). Considerando el tipo de operación que es, esto no debería ser una preocupación de rendimiento.

4 Me gusta

No es una preocupación de rendimiento, solo una molestia explicar a personas menos expertas que el icono del lápiz en la parte superior de su publicación es normal y que así será.

Llevará algún tiempo, pero eventualmente nos acostumbraremos.

Resulta un tanto desagradable que las publicaciones se muestren como editadas, pero está bien siempre que todo funcione.

Sin embargo, es un problema que las notificaciones sean incorrectas. Muestran la nueva publicación creada por el usuario del sistema.

Hasta ahora, esto se siente como una solución temporal, no como una solución. Ciertamente es un gran paso atrás no poder simplemente publicar como el usuario correcto automáticamente. No estoy seguro de entender qué causó que esto fallara en primer lugar.

La versión corta es que he estado cambiando lentamente la forma en que el plugin maneja todas sus solicitudes a discourse por diversas razones, en particular pruebas y seguridad. El contexto completo y la justificación de los cambios son demasiado largos para discutirlos aquí. Aprecio que en el contexto de esta característica en particular pueda parecer “si no está roto, no lo arregles”, sin embargo, hay un contexto más amplio aquí.

Estos cambios han estado ocurriendo durante algún tiempo (meses), sin embargo, la razón por la que salen a la luz ahora es porque cometí un error en la versión 2.3.8. Así que incluí el cambio que debería haber estado en esa versión en 2.3.9.

Dicho esto, @jtbayly @itsbhanusharma escucho sus comentarios sobre el enfoque diferente para esta característica en particular. Entiendo que puede parecer una solución improvisada. No lo es. Sin embargo, dados sus comentarios, volveré a incluir la forma existente en el plugin detrás de una configuración que puede usar si lo desea (se publicará en 2.4.0). Haré un seguimiento con una nota cuando eso se fusione en los próximos días.

Espero poder eliminar este enfoque por completo cuando haya abordado los problemas que ambos han planteado, lo más probable es que con algunos cambios adicionales en discourse/discourse. Como se mencionó, haré un anuncio más amplio sobre los cambios en la forma en que el plugin maneja las claves API en el próximo mes (dependiendo de cuándo se fusionen los cambios en discourse/discourse), lo que cubrirá aspectos de esto.

4 Me gusta

Cuando dije esto, fue para reconocer que no estaba seguro de si había alguna otra forma de avanzar. No pretendía ser un comentario de “¡por qué fuiste y lo rompiste!”.

Muy agradecido por tu trabajo para mantener el complemento de WP funcionando con un núcleo de Discourse actualizado. Y muy contento de que haya (probablemente) cambios próximos en el núcleo que permitirán mejorar en esta área.

1 me gusta