Deconectare folosind un link (fără nonce)

26 oct. 2016, 13:20:08
Vizualizări: 7.33K
Voturi: 1

Această întrebare vine de la un non-programator absolut - și a fost pusă în diverse forme de mai multe ori (de exemplu aici).

Pentru a te deconecta corect, URL-ul care declanșează acțiunea are nevoie de un nonce, ca de exemplu:

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

Putem obține nonce-ul așa cum este descris în codex. DAR: ce fac dacă trebuie să declanșez o deconectare folosind un URL. Mai precis: plugin-ul meu CiviCRM are formulare pe care oamenii le pot completa și după finalizare pot redirecționa utilizatorul altundeva -> de exemplu să se deconecteze și să meargă pe altă pagină. Pot copia/insera URL-ul de redirecționare într-un formular ca:

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

-> cum obțin nonce-ul unde ar trebui să fie - sau există alternative???

Salutări!

3
Comentarii

Nonces sunt bazate pe timp și specifice fiecărui utilizator - singura modalitate de a le obține este prin WordPress. Trebuie fie să "conectați" CiviCRM și să descoperiți cum puteți transmite dinamic URL-ul de redirecționare (în loc să-l copiați/lipești într-o setare), fie să eliminați verificarea nonce din procesul de logout (nu este recomandat)

TheDeadMedic TheDeadMedic
26 oct. 2016 14:08:36

Mă gândeam - mulțumesc (voi închide întrebarea atunci). Doar din curiozitate - chiar dacă nu este recomandat - cum aș putea elimina verificarea nonce? Mulțumesc!

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

Voi posta un răspuns.

TheDeadMedic TheDeadMedic
26 oct. 2016 15:30:27
Toate răspunsurile la întrebare 1
1

Aceasta va dezactiva verificarea nonce pentru delogare - răspunderea este pe cont propriu:

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 = '';
    }

    /**
     * Filtrează URL-ul de redirecționare pentru delogare.
     *
     * @since 4.2.0
     *
     * @param string  $redirect_to           URL-ul destinației de redirecționare.
     * @param string  $requested_redirect_to URL-ul solicitat pentru redirecționare transmis ca parametru.
     * @param WP_User $user                  Obiectul WP_User pentru utilizatorul care se deloghează.
     */
    $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );
    wp_safe_redirect( $redirect_to );
    exit;
});
26 oct. 2016 15:33:01
Comentarii

Tocmai am înlocuit $redirect_to = '/'; pentru a redirecționa către pagina principală după deconectare.

Laxmikant Bhumkar Laxmikant Bhumkar
1 ian. 2022 19:35:12