Wie melde ich mich ohne Bestätigung ab? "

13

Im Moment, wenn ich mich auslogge über:

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

Es leitet mich zu der Seite weiter, auf der ich das Abmelden bestätigen muss.

Wie kann ich die Bestätigung entfernen und nach dem Abmelden auf die Homepage umleiten?

Derfder
quelle

Antworten:

30

Dies liegt daran, dass in der URL, die eingecheckt wird, die erforderliche Nonce fehlt wp-login.php

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

Verwenden Sie wp_logout_urldiese Option, um die URL einschließlich der Nonce abzurufen. Wenn Sie zu einer benutzerdefinierten URL umleiten möchten, übergeben Sie sie einfach als Argument.

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

Sie können auch Folgendes verwenden, wp_loginoutdas den Link für Sie generiert, einschließlich der Übersetzung:

echo wp_loginout('/redirect/url/goes/here')
ndm
quelle
1
echo wp_loginout ('/ redirect / url / goes / here') funktioniert
einwandfrei
1
Ich verwende wp_logout_url( get_permalink())und die Bestätigungsseite wird nicht umgangen. Die Nonce wird als Teil der URL generiert, aber ich werde trotzdem zur Bestätigungsseite weitergeleitet
Ralphonz,
Gleiche Ausgabe hier :(
Jarmerson
15

Wenn Sie die wp_logout_url()Funktion nicht verwenden können, können Sie diese Überprüfung mithilfe des folgenden Codes deaktivieren:

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

Ersetzen Sie diese 'url-you-want-to-redirect'durch die URL, die Sie nach dem Abmelden umleiten möchten.

Fügen Sie es in Ihrem functions.php

Дмитрий Шишов
quelle
Dies funktioniert für das Abmelden ohne Validierung, es wird jedoch nicht zu der von mir gewünschten URL umgeleitet.
Phu Nguyen
@PhuNguyen Sie müssen nur die Weiterleitungs-URL zur Weiterleitungsanforderung in dem Code hinzufügen, in dem nach dem Doppelpunkt Anführungszeichen stehen.
NJENGAH
Gibt es Sicherheitsrisiken beim Entfernen dieser Validierung?
Rok
@ user1264304 Ich glaube, dass böswilliges JS, das irgendwie in den Browser geladen wurde, eine Umleitung zur Anmeldeseite durchführen könnte, aber alles, was es tun wird, ist, den Benutzer abzumelden. Wirklich bösartiger Code würde wahrscheinlich versuchen, die URL vor einer gültigen Nonce zu ersetzen. Der Benutzer kann zu einer anderen Site navigieren, die dann einen Link zur Abmeldeseite der aktuellen Site enthält - vorausgesetzt, der anderen Site ist bekannt, dass der Benutzer eine Beziehung hat. Wieder keine andere Konsequenz als den Benutzer abzumelden. Ich habe das noch nie gesehen. Um Ihre Frage zu beantworten, glaube ich nicht, dass es eine Sicherheitsbedingung für das Entfernen der Validierung gibt.
TonyG
Äh, zu viele Weiterleitungen ...
Solomon Closson
3

Wenn Sie in Ihrem Menü einen benutzerdefinierten Link erstellen, setzen Sie die Bezeichnung auf “Logout”und die URL auf http://yourdomain.com/wp-login.php?action=logout. Fügen Sie dann diese Funktion zu Ihrer functions.phpDatei hinzu:

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');

Wenn Sie nach dem Abmelden zur Anmeldeseite umleiten möchten, sollten Sie die Anmelde-URL wie folgt anhängen:

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

Referenzlink

Gufran Hasan
quelle
-2

Dies funktionierte für mich, indem ich /?customer-logout=trueam Ende hinzufügte .

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

Stanley Tan
quelle