Proveedor de SSO para WordPress: página en blanco

Estoy probando usar WordPress como proveedor de SSO para Discourse mediante el plugin. Cuando hago clic en Iniciar sesión en el sitio del foro, me redirige a mi sitio web con un parámetro de URL de SSO añadido, pero la página aparece en blanco. ¿Se supone que el plugin debe leer ese parámetro de URL y realizar una acción que está fallando? ¿Debo enviarlo a una ruta específica del sitio web? No estoy seguro de cuál es el comportamiento esperado, por lo que no sé cómo solucionar el problema. No veo ningún error en los registros de errores de mi servidor.

¿Utiliza su sitio la página de inicio de sesión predeterminada de WordPress en /login.php? Si no es así, es posible que deba agregar una ruta a la opción ‘Ruta a su página de inicio de sesión’ (que se encuentra en la pestaña Proveedor SSO de WP Discourse).

¿Tiene Woocommerce instalado en su sitio?

No utiliza el valor predeterminado y yo lo especificé en el campo. Aún así, sin suerte, solo una página en blanco.

Y no, nada de WooCommerce.

Así que creo que quizás mi comprensión de cómo funcionaría esto es incorrecta o necesito algún cambio adicional. En las pruebas, me di cuenta de que si ya estoy conectado al sitio web, funciona como se espera. Sin embargo, mi expectativa era que, si no estaba conectado al sitio web, iniciara mi proceso de inicio de sesión, pero eso no parece estar ocurriendo. Basado en eso, tengo un par de preguntas de seguimiento:

  1. ¿Se supone que la redirección de inicio de sesión desde Discourse debe enviar al usuario a /?sso=abcd1235… en mi sitio o a /sign-in/?sso=abcd1235… en mi sitio (incluyendo mi ruta de inicio de sesión personalizada)? Actualmente está usando /.
  2. ¿Se espera que mi código de inicio de sesión personalizado mantenga los parámetros de URL del SSO y los incluya en la redirección de vuelta a mi sitio una vez que el usuario haya iniciado sesión, para que luego se realice la conexión SSO?

Y acabo de darme cuenta de que utiliza el nombre de usuario de WordPress para el nombre de usuario de Discourse. En nuestro caso, necesitaríamos usar el apodo de WordPress, ya que el nombre de usuario es un valor hash basado en el proveedor de autenticación de terceros. Así que puede que sea un callejón sin salida.

Sí. Después de hacer clic en el botón ‘Iniciar sesión’ en Discourse, los usuarios serán redirigidos a la URL que has configurado como sso url en Discourse. Esta debería ser la URL principal de tu sitio.

Si aún no has iniciado sesión en WordPress, el código SSO te redirigirá a la URL de inicio de sesión de tu sitio. Esta URL es, por defecto, /wp-login.php. Se puede sobrescribir configurando la opción ‘Ruta a tu página de inicio de sesión’. Después de iniciar sesión, los usuarios deberían ser redirigidos de nuevo a la URL principal de tu sitio, con los parámetros de consulta enviados desde Discourse intactos.

Si esto no funciona para ti cuando aún no has iniciado sesión en WordPress, el problema podría ser que tienes una configuración de redirección de inicio de sesión en tu sitio que está sobrescribiendo la redirección establecida por el código SSO de WP Discourse. Otra posibilidad es que los parámetros de consulta establecidos por Discourse estén siendo eliminados por el código de inicio de sesión de tu sitio.

Puedes utilizar el filtro wpdc_sso_params para sobrescribir el nombre de usuario que establece el plugin:

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    $params['username'] = $user->user_nicename;

    return $params;
}

Para obtener detalles sobre lo que está ocurriendo, consulta wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub.

Acabo de estar revisando el código del plugin y vi dónde podía cambiar eso. Usar una sobrecarga es un enfoque mucho mejor, ¡gracias! Revisaré mi código de inicio de sesión personalizado y veré si y dónde podría estar interfiriendo con el proceso. Esto es muy útil, gracias de nuevo.