¿Cómo cerrar sesión sin la confirmación '¿Realmente deseas cerrar sesión?'?

6 oct 2012, 11:46:32
Vistas: 135K
Votos: 30

Actualmente cuando cierro sesión a través de:

<a href="<?php bloginfo('url'); ?>/wp-login.php?action=logout">Cerrar sesión</a>

me redirige a una página donde necesito confirmar el cierre de sesión.

¿Cómo eliminar la confirmación y redirigir a la página de inicio después del cierre de sesión?

0
Todas las respuestas a la pregunta 8
3
46

Esto sucede porque falta el nonce necesario en la URL, el cual se verifica en wp-login.php

case 'logout' :
    check_admin_referer('log-out');
    ...

Utiliza wp_logout_url para obtener la URL que incluye el nonce. Si deseas redirigir a una URL personalizada, simplemente pásala como argumento.

<a href="<?php echo wp_logout_url('/url/de/redireccion/aqui') ?>">Cerrar sesión</a>

También podrías usar wp_loginout que genera el enlace por ti incluyendo la traducción:

echo wp_loginout('/url/de/redireccion/aqui')
6 oct 2012 13:24:04
Comentarios

echo wp_loginout('/redirect/url/goes/here') está funcionando correctamente...

Mayur Devmurari Mayur Devmurari
30 oct 2015 07:32:47

Estoy usando wp_logout_url( get_permalink()) y la página de confirmación no se omite. El nonce se genera como parte de la URL pero aún me redirige a la página de confirmación

Ralphonz Ralphonz
17 dic 2018 12:42:08

El mismo problema aquí :(

Jarod Thornton Jarod Thornton
14 abr 2019 09:34:35
9
31

Si no puedes usar la función wp_logout_url(), puedes desactivar esta validación usando este código:

add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
    /**
     * Permite cerrar sesión sin confirmación
     */
    if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
        $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-que-deseas-redireccionar';
        $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
        header("Location: $location");
        die;
    }
}

Reemplaza 'url-que-deseas-redireccionar' con la URL a la que deseas redirigir después de cerrar sesión.

Añádelo en tu archivo functions.php

4 abr 2016 16:48:27
Comentarios

Esto funciona para cerrar sesión sin validación, pero no redirige a la URL que quiero.

Phu Nguyen Phu Nguyen
29 jun 2017 11:27:36

@PhuNguyen Solo necesitas agregar la URL de redirección a la solicitud de redirección en ese código donde están las comillas ' ', después de los dos puntos.

NJENGAH NJENGAH
17 dic 2017 08:01:54

¿hay implicaciones de seguridad al eliminar esta validación?

rokpoto.com rokpoto.com
20 mar 2018 02:21:22

@user1264304 Creo que un JS malicioso cargado en el navegador podría hacer una redirección a la página de inicio de sesión, pero todo lo que hará es cerrar la sesión del usuario. Un código verdaderamente malicioso probablemente buscaría reemplazar la URL antes de un nonce válido. El usuario podría navegar a otro sitio que luego tenga un enlace a la página de cierre de sesión del sitio actual, asumiendo que el otro sitio sabe que el usuario tiene una relación. Nuevamente, no hay consecuencia más que cerrar la sesión del usuario. Nunca he visto esto. Así que para responder a tu pregunta, no creo que haya una implicación de seguridad al eliminar la validación.

TonyG TonyG
4 may 2018 18:47:16

Error, Demasiadas Redirecciones...

Solomon Closson Solomon Closson
5 feb 2019 18:49:49

Excelente solución para mí, especialmente porque no requiere PHP adicional en mi página de cierre de sesión. Simplemente uso este enlace: wp-login.php?action=logout Y como redirección, uso home_url() para que funcione en cualquier sitio.

Ralf Ralf
28 ago 2020 09:38:35

Definitivamente podemos usar wp_logout_url. Y esto es lo que necesitas:

$location = str_replace('&', '&', wp_logout_url($redirect_to));

Solo redirige a esa $location y cerrarás sesión sin confirmación.

Tuananhcwrs Tuananhcwrs
25 sept 2020 06:56:33

Esta es una gran solución para mí, pero también encuentro que no está redirigiendo. Simplemente me devuelve a la página de inicio...

SolaceBeforeDawn SolaceBeforeDawn
28 oct 2021 08:41:21

Esta es una solución ideal para agregar un botón de cierre de sesión a un menú de WordPress.

Kai Qing Kai Qing
10 mar 2023 05:01:48
Mostrar los 4 comentarios restantes
1
13

Si creas un enlace personalizado en tu menú, establece la etiqueta como “Logout” y la URL como http://tudominio.com/wp-login.php?action=logout. Luego, agrega esta función a tu archivo functions.php:

function change_menu($items){
  foreach($items as $item){
    if( $item->title == "Logout"){
         $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' );
    }
  }
  return $items;

}
add_filter('wp_nav_menu_objects', 'change_menu');

Si deseas redirigir a la página de inicio de sesión después del cierre de sesión, debes agregar la URL de inicio de sesión de la siguiente manera:

$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();

Enlace de referencia

** probé eso y no funcionó. Realmente quiero que la página de cierre de sesión muestre "algo salió mal" al hacer clic en el botón.

4 mar 2019 16:38:44
Comentarios

Esto funcionó completamente para mí, incluyendo el redireccionamiento. Debes tener cuidado de usar el formato PHP correcto para agregar un enlace. Aquí está mi código para esa línea: $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.'https://google.com';

Ben Blue Ben Blue
24 ago 2022 19:35:50
1

Esto funcionó para mí añadiendo /?customer-logout=true al final.

http://www.website.com/?customer-logout=true

2 ago 2019 02:55:14
Comentarios

Esto también funcionó bien para mí... Pero tal vez solo se puede usar si WooCommerce está instalado... No lo sé...

Aerendir Aerendir
4 feb 2022 14:23:21
0

Si estás usando el tema inicial roots/sage para WordPress, o cualquier otro tema que utilice el motor de plantillas Blade de Laravel, asegúrate de no escapar la URL:

// no hagas esto
<a href="{{ wp_logout_url(get_permalink()) }}">cerrar sesión</a>

// haz esto en su lugar
<a href="{!! wp_logout_url(get_permalink()) !!}">cerrar sesión</a>

El primer ejemplo escapa todos los caracteres HTML, mientras que el segundo no lo hace.

28 may 2021 10:51:31
0

Estaba obteniendo la URL de cierre de sesión usando wp_logout_url() pero seguía mostrando la confirmación. Resultó que estaba convirtiendo caracteres como & a &amp; lo cual estaba rompiendo los parámetros de la URL. Hacer esto lo solucionó:

html_entity_decode( wp_logout_url() )

25 oct 2024 10:47:21
0

Para omitir el mensaje de confirmación al cerrar sesión, define _wpnonce para la acción log-out en la URL de esta manera:

$log_out_url = add_query_arg('_wpnonce', wp_create_nonce('log-out'), wp_logout_url());

wp_safe_redirect($log_out_url);
exit;
9 ago 2022 22:19:14
0
5 sept 2024 18:46:30