Come disconnettersi senza conferma "Vuoi veramente disconnetterti?"?


13

In questo momento quando esco tramite:

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

mi reindirizza alla pagina in cui devo confermare il logout.

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

Risposte:


30

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

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

Utilizzare wp_logout_urlper recuperare l'URL incluso il nonce. Se si desidera reindirizzare a un URL personalizzato, è sufficiente passarlo come argomento.

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

Puoi anche utilizzare ciò wp_loginoutche genera il link per te, inclusa la traduzione:

echo wp_loginout('/redirect/url/goes/here')

1
echo wp_loginout ('/ redirect / url / goes / here') funziona perfettamente ..
Mayur Devmurari,

1
Sto usando wp_logout_url( get_permalink())e la pagina di conferma non è esclusa. Il nonce viene generato come parte dell'URL, ma sono ancora inviato alla pagina di conferma
Ralphonz,

Stesso problema qui :(
Jarmerson

15

Se non puoi usare la wp_logout_url()funzione, puoi disattivare questa validazione usando questo codice:

add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
    /**
     * Allow logout without confirmation
     */
    if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
        $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-you-want-to-redirect';
        $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
        header("Location: $location");
        die;
    }
}

Sostituisci 'url-you-want-to-redirect'con l'URL che desideri reindirizzare dopo il logout.

Aggiungilo nel tuo functions.php


Funziona per disconnettersi senza convalida, ma non reindirizza all'URL che desidero.
Phu Nguyen,

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

ci sono implicazioni di sicurezza per la rimozione di questa convalida?
Rok

@ user1264304 Credo che JS dannoso in qualche modo caricato nel browser possa fare un reindirizzamento alla pagina di accesso, ma tutto ciò che farà è disconnettersi dall'utente. Un codice veramente dannoso probabilmente cercherebbe di sostituire l'URL prima di un nonce valido. L'utente può accedere a un altro sito che ha quindi un collegamento alla pagina di disconnessione del sito corrente, supponendo che l'altro sito sia consapevole che l'utente ha una relazione. Ancora una volta, nessuna conseguenza diversa dalla disconnessione dell'utente. Non l'ho mai visto. Quindi, per rispondere alla tua domanda, non penso che vi siano implicazioni di sicurezza per la rimozione della convalida.
TonyG,

Err, Troppi reindirizzamenti ...
Solomon Closson,

3

Se si crea un collegamento personalizzato nel menu, impostare l'etichetta su “Logout”e impostare l'URL su http://yourdomain.com/wp-login.php?action=logout. Quindi aggiungi questa funzione al tuo functions.phpfile:

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 si desidera reindirizzare alla pagina di accesso dopo la disconnessione, è necessario aggiungere l'URL di accesso come:

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

Link di riferimento


-2

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.