Cómo cerrar sesión usando un enlace (sin nonce)

26 oct 2016, 13:20:08
Vistas: 7.33K
Votos: 1

Esta pregunta viene de alguien que no es programador - y se ha formulado de varias formas anteriormente (ej. aquí).

Para cerrar sesión correctamente, la URL que lo activa necesita un nonce como por ejemplo:

http://xyz/wp-login.php?action=logout&redirect_to=http%3A%2F%2Fwww.spiegel.de&_wpnonce=d9d1a28ef2

Podemos obtener el nonce como se describe en el codex. PERO: ¿qué pasa si necesito activar un logout mediante una URL? Más concretamente: mi plugin de CiviCRM tiene formularios que la gente puede completar y una vez terminados redirigen al usuario a otro sitio -> por ejemplo, cerrar sesión e ir a otra página. Puedo copiar/pegar la URL de redirección en un formulario como:

http://xyz/wp-login.php?action=logout&redirect_to=http%3A%2F%2Fwww.spiegel.de

-> ¿cómo obtengo el nonce donde se supone que debe ir o existen alternativas???

¡Saludos!

3
Comentarios

Los nonces están basados en tiempo y son por usuario: la única forma de obtenerlos es a través de WordPress. Tendrías que "engancharte" a CiviCRM y averiguar cómo puedes pasarle dinámicamente la URL de redirección (en lugar de copiar/pegar en una configuración), o eliminar la verificación de nonce del proceso de cierre de sesión (no recomendado)

TheDeadMedic TheDeadMedic
26 oct 2016 14:08:36

Eso pensaba - gracias (cerraré la pregunta entonces). Solo por curiosidad - aunque no sea recomendado - ¿cómo podría eliminar la verificación de nonce? ¡Saludos!

Abteilung Gerontopsychiatrie Abteilung Gerontopsychiatrie
26 oct 2016 15:21:53

Publicaré una respuesta.

TheDeadMedic TheDeadMedic
26 oct 2016 15:30:27
Todas las respuestas a la pregunta 1
1

Esto desactivará la verificación del nonce para cerrar sesión - bajo tu propia responsabilidad:

add_action( 'login_form_logout', function () {
    $user = wp_get_current_user();

    wp_logout();

    if ( ! empty( $_REQUEST['redirect_to'] ) {
        $redirect_to = $requested_redirect_to = $_REQUEST['redirect_to'];
    } else {
        $redirect_to = 'wp-login.php?loggedout=true';
        $requested_redirect_to = '';
    }

    /**
     * Filtra la URL de redirección al cerrar sesión.
     *
     * @since 4.2.0
     *
     * @param string  $redirect_to           La URL de destino de redirección.
     * @param string  $requested_redirect_to La URL de redirección solicitada pasada como parámetro.
     * @param WP_User $user                  El objeto WP_User del usuario que está cerrando sesión.
     */
    $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );
    wp_safe_redirect( $redirect_to );
    exit;
});
26 oct 2016 15:33:01
Comentarios

Acabo de reemplazar $redirect_to = '/'; para redirigir a la página de inicio después del cierre de sesión.

Laxmikant Bhumkar Laxmikant Bhumkar
1 ene 2022 19:35:12