Enlace de redirección SSO

I am using wordpress as a SSO client to discourse.

How do I set it up so a user is sent back to the page he/she was on after logging in.

Here is what my SSO URL looks like:


As you can see it redirects to my website homepage. Could I edit this link to redirect the user back to the page he was on? will this mess up the SSO?

Yes, you can set any page on your WordPress site as the value for redirect_to. You probably do not have to URL encode the redirect_to parameter. Something like this should work:

http://theprojectvanlife.com/?discourse_sso=1&redirect_to=http://theprojectvanlife.com/my-wordpress-page

so by adding “my-wordpress-page” as the redirect it will redirect user to the page he/she was on?
Or did you mean to replace “my-wordpress-page” with the page I want the user redirected to?

Yes. set the redirect_to parameter to the URL of the page you want users to end up on.

Is it possible to setup a redirect to link that just sends them back to the same page they were on?

You can use the [discourse_sso_client] shortcode on any WordPress page to create a ‘Login with Discourse’ link that will redirect users back to the page that the shortcode was placed on.

There is some documentation on the plugin’s SSO Client tab for the shortcode.

There was a bug in the most recent versions of the plugin that was causing the shortcode to display the ‘Link your account with Discourse’ text for logged in users who had already linked their account. Update to WP Discourse version 1.6.0 to get the fix.

Hola, creo que sería una adición sencilla pero excelente a la funcionalidad del plugin si pudieras implementar esto también: ¿Formulario de registro o enlace independiente?. Estoy usando Discourse como maestro de SSO y sería muy útil proporcionar tanto una página de inicio de sesión para los usuarios existentes como un enlace de registro para nuevos usuarios, con redirección a la página original desde la que llegaron.

Hola, no tenemos planes actuales de implementar nada aquí más allá del parámetro redirect_to.

Hacer que “redirija a alguien de vuelta a la misma página en la que estaba” es un poco más complicado de lo que parece. Hay bastantes casos límite. Si lo agregáramos como una función central, esencialmente estaríamos comprometiéndonos a admitir todos esos casos límite también :slight_smile: Como puedes imaginar, hay muchas formas diferentes de configurar un sitio de WordPress.

Ya te di un pequeño pista sobre esto, pero para ayudarte un poco más, tú o tu desarrollador querrán hacer algo así, es decir, extender el shortcode existente para establecer automáticamente route_to en la URL actual del sitio. Luego, puedes resolver los casos límite para tu sitio específico.

En functions.php

use WPDiscourse\SSOClient\SSOClientShortcode;

function render_discourse_sso_client_link_with_redirect() {
    $sso = new SSOClientShortcode();
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http");
    $current_url = "$protocol://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $options = array(
      "redirect"  => $current_url,
      "login"     => "Iniciar sesión"
    );
    return $sso->discourse_sso_client_shortcode( $options );
}
add_shortcode( 'discourse_sso_client_link_with_redirect', 'render_discourse_sso_client_link_with_redirect' );

Luego, en tu plantilla, usa el shortcode [discourse_sso_client_link_with_redirect]

¡Gracias, me ayuda mucho, amigo!