Cum să te deconectezi fără confirmarea 'Chiar vrei să te deconectezi?'?

6 oct. 2012, 11:46:32
Vizualizări: 135K
Voturi: 30

În prezent când mă deconectez prin:

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

sunt redirecționat către o pagină unde trebuie să confirm deconectarea.

Cum pot elimina confirmarea și să fiu redirecționat către pagina principală după deconectare?

0
Toate răspunsurile la întrebare 8
3
46

Acest lucru se întâmplă pentru că lipsește nonce-ul necesar în URL, care este verificat în wp-login.php

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

Folosește wp_logout_url pentru a obține URL-ul care include nonce-ul. Dacă dorești să redirecționezi către un URL personalizat, pur și simplu treci acel URL ca argument.

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

De asemenea, poți folosi wp_loginout care generează link-ul pentru tine, inclusiv traducerea:

echo wp_loginout('/redirect/url/goes/here')
6 oct. 2012 13:24:04
Comentarii

echo wp_loginout('/redirect/url/goes/here') funcționează corect..

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

Folosesc wp_logout_url( get_permalink()) dar pagina de confirmare nu este ocolită. Nonce-ul este generat ca parte din URL dar tot sunt redirecționat către pagina de confirmare

Ralphonz Ralphonz
17 dec. 2018 12:42:08

Aceeași problemă aici :(

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

Dacă nu poți folosi funcția wp_logout_url(), poți dezactiva această validare folosind următorul cod:

add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
    /**
     * Permite delogarea fără confirmare
     */
    if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
        $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-unde-dorești-redirecționarea';
        $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
        header("Location: $location");
        die;
    }
}

Înlocuiește 'url-unde-dorești-redirecționarea' cu URL-ul către care dorești să redirecționezi după delogare.

Adaugă acest cod în fișierul tău functions.php

4 apr. 2016 16:48:27
Comentarii

Aceasta funcționează pentru deconectare fără validare, dar nu redirecționează către URL-ul dorit.

Phu Nguyen Phu Nguyen
29 iun. 2017 11:27:36

@PhuNguyen Trebuie doar să adaugi URL-ul de redirecționare la cererea de redirecționare în acel cod unde sunt ghilimelele ' ', după două puncte.

NJENGAH NJENGAH
17 dec. 2017 08:01:54

există implicații de securitate pentru eliminarea acestei validări?

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

@user1264304 Cred că un cod JS rău intenționat încărcat în browser ar putea face o redirecționare către pagina de login, dar tot ce va face este să deconecteze utilizatorul. Un cod cu adevărat rău intenționat ar încerca probabil să înlocuiască URL-ul înainte de un nonce valid. Utilizatorul ar putea naviga pe un alt site care apoi are un link către pagina de logout a site-ului curent - presupunând că celălalt site este conștient că utilizatorul are o relație. Din nou, nicio consecință în afară de deconectarea utilizatorului. Nu am văzut niciodată asta. Deci, ca răspuns la întrebarea ta, cred că Nu există o implicație de securitate pentru eliminarea validării.

TonyG TonyG
4 mai 2018 18:47:16

Hmm, Prea Multe Redirecționări...

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

Soluție excelentă pentru mine, mai ales pentru că nu necesită PHP suplimentar pe pagina mea de logout. Pur și simplu folosesc acest link: wp-login.php?action=logout Și ca redirecționare, folosesc home_url() așa că funcționează pe orice site.

Ralf Ralf
28 aug. 2020 09:38:35

Putem folosi cu siguranță wp_logout_url. Și iată ce ai nevoie:

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

Doar redirecționează către acea $location și te vei deconecta fără confirmare.

Tuananhcwrs Tuananhcwrs
25 sept. 2020 06:56:33

Aceasta este o soluție excelentă pentru mine, dar am observat că nu se face redirecționarea. Sunt pur și simplu trimis înapoi pe pagina principală...

SolaceBeforeDawn SolaceBeforeDawn
28 oct. 2021 08:41:21

Aceasta este o soluție ideală pentru adăugarea unui buton de deconectare într-un meniu WordPress.

Kai Qing Kai Qing
10 mar. 2023 05:01:48
Arată celelalte 4 comentarii
1
13

Dacă creați un link personalizat în meniu, setați eticheta la „Logout” și URL-ul la http://domeniultau.com/wp-login.php?action=logout. Apoi adăugați această funcție în fișierul 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');

Dacă doriți să redirecționați către pagina de autentificare după deconectare, trebuie să adăugați URL-ul de autentificare astfel:

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

Link de referință

** am încercat asta dar nu a funcționat. Chiar vreau să fie o pagină de deconectare, apoi 4 ceva nu a mers bine când am dat click pe buton.

4 mar. 2019 16:38:44
Comentarii

Aceasta a funcționat complet pentru mine, inclusiv redirecționarea. Trebuie să fii atent să folosești formatarea corectă PHP pentru a adăuga un link. Iată codul meu pentru acea linie: $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.'https://google.com';

Ben Blue Ben Blue
24 aug. 2022 19:35:50
1

Aceasta soluție a funcționat pentru mine prin adăugarea /?customer-logout=true la sfârșit.

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

2 aug. 2019 02:55:14
Comentarii

A funcționat și pentru mine... Dar poate poate fi folosit doar dacă WooCommerce este instalat... Nu știu...

Aerendir Aerendir
4 feb. 2022 14:23:21
0

Dacă folosești tema WordPress roots/sage sau orice altă temă care utilizează motorul de template-uri Blade din Laravel, asigură-te că nu escape-ui URL-ul:

// nu face așa
<a href="{{ wp_logout_url(get_permalink()) }}">deconectare</a>

// ci așa
<a href="{!! wp_logout_url(get_permalink()) !!}">deconectare</a>

Primul exemplu escape-uiă toate caracterele HTML, în timp ce cel de-al doilea nu.

28 mai 2021 10:51:31
0

Foloseam funcția wp_logout_url() pentru a obține URL-ul de deconectare, dar tot apărea confirmarea. Am descoperit că funcția convertesc caractere precum & în &amp;, ceea ce strică parametrii din URL. Am rezolvat problema folosind:

html_entity_decode( wp_logout_url() )

25 oct. 2024 10:47:21
0

Pentru a ocoli confirmarea de delogare, definește _wpnonce pentru acțiunea log-out în URL astfel:

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

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