WordPress SSO y inicio de sesión de Patreon

¡Buen trabajo al averiguar eso :+1:

No quiero restar valor al trabajo que has realizado, pero mi primera impresión es que deberías considerar utilizar un servicio de autenticación externo (como okta.com o auth0.com) en este punto. Siempre que llegues al punto de conectar tres servicios diferentes (por ejemplo, Patreon, WordPress y Discourse) para lograr una única autenticación de una sola vez, es una señal de que deberías estar considerando una solución de autenticación dedicada. Independientemente de si puedes lograrlo de alguna manera, existe un riesgo considerable a largo plazo de que tu solución falle o no funcione en todos los casos.

Si aún deseas seguir por este camino, tengo algunas sugerencias, pero advierto que esto se volverá un poco técnico. Estoy agregando esto en parte por si alguien más se encuentra con esto y quiere llevarlo más lejos.

Eché un vistazo rápido al código del plugin de Patreon para WordPress y parece que su flujo de OAuth acepta una clave/valor final_redirect_uri en el parámetro state, lo que te permitiría pasar directamente de la autenticación de Patreon al SSO de Discourse, eliminando la necesidad de los plugins Members y Redirect mencionados anteriormente y evitando cualquier problema que pueda surgir con ese enfoque.

Muchos servicios de autenticación tienen una versión del parámetro final_redirect_uri, es decir, un parámetro que te permitirá cambiar el destino al que se envía al usuario después de la autenticación. Si estás leyendo esto porque estás intentando resolver el mismo problema, pero con un servicio diferente (es decir, otro que no sea Patreon), y también has decidido que mi advertencia sobre conectar tres servicios diferentes no aplica, entonces ahí es donde deberías buscar.

Esto significa que querrías que el shortcode que genera el botón de inicio de sesión de Patreon acepte un final_redirect_uri como argumento, el cual luego se pasaría a la URL de inicio de sesión utilizada finalmente por Patreon. Al observar el código del plugin de Patreon para WordPress, esto es una posibilidad viable. Para darte una idea, la función relevante que genera la URL de Patreon se ve así:

Patreon_Frontend::patreonMakeLoginLink(false, array( 'final_redirect_uri' => # ) );

Básicamente, el código ya está parcialmente configurado para manejar un final_redirect_uri personalizado. Puedo entender por qué los desarrolladores del plugin de Patreon para WordPress podrían no querer agregarlo, pero si sientes que tienes suficiente confianza para describir lo que he explicado aquí, podría valer la pena crear un problema en su repositorio de GitHub. Si eso no funciona, puedes usar la función que he mencionado anteriormente para generar un enlace tú mismo y crear tu propio botón (o contratar a un desarrollador de WordPress para que lo haga).

Solo una nota menor sobre la construcción de la URL de SSO: es un poco más claro usar

https://discourse.example.com/session/sso?return_path=/

en lugar de

https://discourse.example.com/session/sso?return_path=%2F

Esa última parte, el return_path, es la ruta a la que se envía al usuario en Discourse después del inicio de sesión. Si es /, se le enviará a la página principal del foro. Para más información sobre la construcción de la URL de SSO, consulta Consejos y trucos de WP Discourse.