Come effettuare il logout tramite link (senza nonce)

26 ott 2016, 13:20:08
Visualizzazioni: 7.33K
Voti: 1

Questa domanda viene da un assoluto non-programmatore - ed è stata posta in varie forme più volte (ad esempio qui).

Per effettuare correttamente il logout, l'URL che lo attiva ha bisogno di un nonce come ad esempio:

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

Possiamo ottenere il nonce come descritto nel codex. MA: cosa succede se devo attivare un logout utilizzando un URL. Più precisamente: il mio plugin CiviCRM ha moduli che le persone possono compilare e una volta completati reindirizzano l'utente da qualche parte -> ad esempio effettuare il logout e andare su un'altra pagina. Posso copiare/incollare l'URL di reindirizzamento in un modulo come

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

-> come posso ottenere il nonce dove dovrebbe andare - oppure esistono alternative???

Saluti!

3
Commenti

I nonce sono basati sul tempo e specifici per utente - l'unico modo per ottenerli è attraverso WordPress. Dovresti "agganciarti" a CiviCRM e capire come passargli dinamicamente l'URL di reindirizzamento (invece di copiarlo/incollarlo in un'impostazione), oppure rimuovere il controllo del nonce dal processo di logout (non raccomandato)

TheDeadMedic TheDeadMedic
26 ott 2016 14:08:36

Pensavo fosse così - grazie (chiuderò la domanda allora). Solo per curiosità - anche se non è raccomandato - come potrei procedere per rimuovere il controllo del nonce? Saluti!

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

Pubblicherò una risposta.

TheDeadMedic TheDeadMedic
26 ott 2016 15:30:27
Tutte le risposte alla domanda 1
1

Questo disabiliterà il controllo del nonce per il logout - la responsabilità è tua:

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 l'URL di reindirizzamento dopo il logout.
     *
     * @since 4.2.0
     *
     * @param string  $redirect_to           L'URL di destinazione per il reindirizzamento.
     * @param string  $requested_redirect_to L'URL di reindirizzamento richiesto passato come parametro.
     * @param WP_User $user                  L'oggetto WP_User per l'utente che sta effettuando il logout.
     */
    $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );
    wp_safe_redirect( $redirect_to );
    exit;
});
26 ott 2016 15:33:01
Commenti

Ho appena sostituito $redirect_to = '/'; per reindirizzare alla homepage dopo il logout.

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