Come effettuare il logout senza la conferma "Vuoi veramente effettuare il logout?"

6 ott 2012, 11:46:32
Visualizzazioni: 135K
Voti: 30

Attualmente quando effettuo il logout tramite:

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

vengo reindirizzato a una pagina dove devo confermare il logout.

Come posso eliminare la conferma e reindirizzare alla homepage dopo il logout?

0
Tutte le risposte alla domanda 8
3
46

Questo accade perché manca il necessario nonce nell'URL, che viene verificato in wp-login.php

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

Utilizza wp_logout_url per ottenere l'URL incluso il nonce. Se vuoi reindirizzare a un URL personalizzato, basta passarlo come argomento.

<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Esci</a>

Puoi anche usare wp_loginout che genera automaticamente il link includendo la traduzione:

echo wp_loginout('/redirect/url/goes/here')
6 ott 2012 13:24:04
Commenti

echo wp_loginout('/redirect/url/goes/here') funziona correttamente..

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

Sto usando wp_logout_url( get_permalink()) ma la pagina di conferma non viene bypassata. Il nonce viene generato come parte dell'URL ma vengo comunque reindirizzato alla pagina di conferma

Ralphonz Ralphonz
17 dic 2018 12:42:08

Stesso problema qui :(

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

Se non puoi utilizzare la funzione wp_logout_url(), puoi disattivare questa validazione utilizzando questo codice:

add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
    /**
     * Permette il logout senza conferma
     */
    if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
        $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-di-redirect-desiderata';
        $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
        header("Location: $location");
        die;
    }
}

Sostituisci 'url-di-redirect-desiderata' con l'URL a cui vuoi reindirizzare dopo il logout.

Aggiungilo nel tuo file functions.php

4 apr 2016 16:48:27
Commenti

Questo funziona per il logout senza validazione, ma non reindirizza all'URL che desidero.

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

@PhuNguyen Devi solo aggiungere l'URL di reindirizzamento alla richiesta di redirect in quel codice dove ci sono gli apici ' ', dopo i due punti.

NJENGAH NJENGAH
17 dic 2017 08:01:54

ci sono implicazioni per la sicurezza rimuovendo questa validazione?

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

@user1264304 Credo che del codice JS malevolo caricato nel browser potrebbe in qualche modo reindirizzare alla pagina di login, ma tutto ciò che farà sarà disconnettere l'utente. Un codice veramente malevolo probabilmente cercherebbe di sostituire l'URL prima di un nonce valido. L'utente potrebbe navigare su un altro sito che poi ha un link alla pagina di logout del sito corrente - assumendo che l'altro sito sia consapevole che l'utente abbia una relazione con esso. Di nuovo, nessuna conseguenza se non la disconnessione dell'utente. Non l'ho mai visto accadere. Quindi, per rispondere alla tua domanda, Non penso ci sia un'implicazione di sicurezza nella rimozione della validazione.

TonyG TonyG
4 mag 2018 18:47:16

Err, Troppi Reindirizzamenti...

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

Soluzione eccellente per me soprattutto perché non richiede PHP aggiuntivo sulla mia pagina di logout. Uso semplicemente questo link: wp-login.php?action=logout E come reindirizzamento, uso home_url() così funziona su qualsiasi sito.

Ralf Ralf
28 ago 2020 09:38:35

Possiamo sicuramente usare wp_logout_url. Ecco cosa ti serve:

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

Basta reindirizzare a quella $location e verrai disconnesso senza conferma.

Tuananhcwrs Tuananhcwrs
25 set 2020 06:56:33

Questa è un'ottima soluzione per me, ma ho notato che non reindirizza. Vengo semplicemente riportato alla pagina home...

SolaceBeforeDawn SolaceBeforeDawn
28 ott 2021 08:41:21

Questa è la soluzione ideale per aggiungere un pulsante di logout a un menu di WordPress.

Kai Qing Kai Qing
10 mar 2023 05:01:48
Mostra i restanti 4 commenti
1
13

Se crei un link personalizzato nel tuo menu, imposta l'etichetta su "Logout" e l'URL su http://yourdomain.com/wp-login.php?action=logout. Poi aggiungi questa funzione al tuo file 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');

Se vuoi reindirizzare alla pagina di login dopo il logout, dovresti aggiungere l'URL di login in questo modo:

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

Link di riferimento

** provato ma non ha funzionato. Ottengo una pagina di logout e poi un messaggio "qualcosa è andato storto" quando clicco il pulsante.

4 mar 2019 16:38:44
Commenti

Questo ha funzionato perfettamente per me, incluso il reindirizzamento. Devi fare attenzione a usare la formattazione PHP corretta per aggiungere un link. Ecco il mio codice per quella riga: $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

Questo ha funzionato per me aggiungendo /?customer-logout=true alla fine.

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

2 ago 2019 02:55:14
Commenti

Anche per me ha funzionato bene... Ma forse può essere usato solo se WooCommerce è installato... Non lo so...

Aerendir Aerendir
4 feb 2022 14:23:21
0

Se stai utilizzando il tema WordPress starter roots/sage, o qualsiasi altro tema che utilizza il motore di templating Blade di Laravel, assicurati di non eseguire l'escape dell'URL:

// non fare
<a href="{{ wp_logout_url(get_permalink()) }}">esci</a>

// ma invece
<a href="{!! wp_logout_url(get_permalink()) !!}">esci</a>

Il primo esempio esegue l'escape di tutti i caratteri HTML, mentre il secondo no.

28 mag 2021 10:51:31
0

Stavo recuperando l'URL di logout utilizzando wp_logout_url() ma continuava a mostrare la conferma. Ho scoperto che stava convertendo caratteri come & in &amp; il che interrompeva i parametri dell'URL. Facendo così ho risolto:

html_entity_decode( wp_logout_url() )

25 ott 2024 10:47:21
0

Per bypassare la richiesta di conferma di logout, definisci _wpnonce per l'azione log-out nell'URL in questo modo:

$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

Questo è davvero un bel po' di hacking. Che ne dici di questo: https://wpsandbox.net/wordpress/custom-logout-link-wordpress-p1498

5 set 2024 18:46:30