php wordpress passwort ändern – mich abmelden!

Lesezeit: 6 Minuten

php wordpress passwort andern mich abmelden
Fearhal

Ich versuche, ein eigenes einfaches WordPress-Passwortänderungsskript zu erstellen (naja, wirklich basierend auf einem Plugin) – das Passwort wurde erfolgreich geändert – aber es meldet mich ab, nachdem die Änderung abgeschlossen ist! Unten ist der verwendete Code. Kann jemand sehen, wo ich abgemeldet werde und wie ich das verhindern kann? Danke!

$update = $wpdb->query($wpdb->prepare("UPDATE {$wpdb->users} SET `user_pass` = %s WHERE `ID` = %d",array(wp_hash_password($_POST['admin_pass1']),$user_ID)));

if(!is_wp_error($update))
{
    wp_cache_delete($user_ID,'users');
    wp_cache_delete($user->user_login,'userlogins');
    wp_logout();
    if (wp_signon(array('user_login'=>$user->user_login,'user_password'=>$_POST['admin_pass1']),false)):
        wp_redirect(admin_url());
    endif;
    ob_start();
}

  • Das würde ich vermuten wp_logout(); hat was damit zu tun lol

    – Wesley Murch

    18. April 2011 um 16:44 Uhr

  • natürlich, aber die Anmeldefunktion danach sollte mich direkt zu meinem Dashboard zurückbringen … das ist von dem Plugin, das für sich genommen gut funktioniert hat …

    – Fearhal

    18. April 2011 um 16:52 Uhr

  • Tatsache ist, dass selbst wenn dieser Block entfernt wurde – WordPress mich immer noch abmeldet, was ich persönlich bizarr finde ….

    – Fearhal

    18. April 2011 um 17:10 Uhr

  • @madmartigan in der Tat. “Jedes Mal, wenn ich mit einem Hammer auf meine Hand schlage, scheint ein Hammer auf meine Hand zu schlagen. Warum ist das so?”

    – Markus B

    18. April 2011 um 19:29 Uhr

Nach dem Zurücksetzen des Passworts müssen Sie Cookies setzen/zurücksetzen (http://codex.wordpress.org/Function_Reference/wp_set_auth_cookie)
so was

$update = $wpdb->query($wpdb->prepare("UPDATE {$wpdb->users} SET `user_pass` = %s WHERE `ID` = %d",array(wp_hash_password($_POST['admin_pass1']),$user_ID)));

if(!is_wp_error($update))
{
    wp_cache_delete($user_ID,'users');
    wp_cache_delete($user->user_login,'userlogins');
    wp_logout();
    if (wp_signon(array('user_login'=>$user->user_login,'user_password'=>$_POST['admin_pass1']),false)):
        wp_redirect(admin_url());
    endif;
    ob_start();
}else{
    wp_set_auth_cookie( $current_user_id, true);
}

Um das Passwort zurückzusetzen, verwenden Sie besser WordPress-Funktionen wie wp_check_password und wp_set_password wegen der Integration mit anderen Anwendungen/Plugins.

Wurde hier von einem anderen Beitrag verlinkt und wollte eine aktualisierte Lösung für dieses Problem geben, da einige dieser Lösungen (insbesondere das direkte Ändern von wpdb->query) nicht mehr die beste Vorgehensweise sind.

Aktualisieren Sie das Passwort des Benutzers mit wp_set_password() und melden Sie den Benutzer dann mit wp_signon() wieder an.

wp_signon erstellt das Authentifizierungs-Cookie für Sie, wie andere Benutzer vorgeschlagen haben, aber auf eine viel rationalisiertere Weise.

function create_new_password_for_user($new_password){
    //Get the current user's details, while they're still signed in, in this scope.
     $current_user = wp_get_current_user();
     $current_user_id = $current_user->ID;
     $users_login = $current_user->user_email;

    //set their new password (this will trigger the logout)
    wp_set_password($new_password, $current_user_id);

    //setup the data to be passed on to wp_signon
    $user_data = array(
            'user_login'     => $users_login,
            'user_password'    => $new_password,
            'remember'        => false
        );

    // Sign them back in.
    $result = wp_signon( $user_data );

    if(is_wp_error($result)){
      //do something with an error, if there is one.
    }else{
      //do something with the successful change. 
    }
}

php wordpress passwort andern mich abmelden
Schuh

Eigentlich das:

if(!is_wp_error($update))
{
    wp_cache_delete($user_ID,'users');
    wp_cache_delete($user->user_login,'userlogins');
    wp_logout();
    if (wp_signon(array('user_login'=>$user->user_login,'user_password'=>$_POST['admin_pass1']),false)):
        wp_redirect(admin_url());
    endif;
    ob_start();
}

bedeutet, dass im fehlerfreien Fall die folgenden Funktionen ausgeführt werden. Eine dieser Funktionen ist wp_logout() die immer dann aufgerufen wird, wenn der Bedingungsblock ausgeführt wird.

Wenn es nicht das ist, was Sie möchten, sollten Sie Folgendes ersetzen:

if(!is_wp_error($update))

mit:

if(is_wp_error($update))

  • Ich benutze nicht einmal WP und wp_logout() schien offensichtlich. Für mich sah ich if no error updating then do stuff including wp_logout(). Tatsächlich sieht nichts von dem Zeug in diesem Block so aus, als ob es notwendig wäre, aber wie gesagt, ich benutze kein WP

    – Wesley Murch

    18. April 2011 um 16:53 Uhr


php wordpress passwort andern mich abmelden
Mayur Chauhan

Probieren Sie den folgenden Code aus, er wird Sie nach einer Passwortänderung nicht abmelden und er funktioniert auch mit Ajax. Außerdem müssen Cookies/Sitzung danach nicht zurückgesetzt werden.

$userdata['ID'] = 1; //user ID
$userdata['user_pass'] = 'new_password';
wp_update_user( $userdata ); // this will handle encryption and everything

Prost

Stellen Sie sicher, dass der Code vor dem Ende der HTTP-Header und dem Beginn des regulären Seiteninhalts ausgeführt wird. Sie erhalten möglicherweise keine Warnung, wenn Sie versehentlich zu lange mit dem Seitengenerierungsprozess warten. Es wird alles stillschweigend fehlschlagen und Sie werden auf mysteriöse Weise abgemeldet (obwohl wp_signon() gibt ein gültiges zurück WP_User Objekt).

1646245747 267 php wordpress passwort andern mich abmelden
Sander

falls du noch nach einer antwort zu diesem thema suchst: ich habe eine lösung gefunden!

Kurz gesagt, nachdem Sie das Passwort aktualisiert haben, löschen Sie die Daten und melden Sie sich ab (wie Sie es getan haben).

wp_cache_delete($user_ID,'users');
wp_cache_delete($user->user_login,'userlogins');
wp_logout();

Benutzer ist jetzt abgemeldet

dann

Führen Sie eine „Umleitung“ zu einer neuen Seite durch, um sich erneut automatisch anzumelden. Fangen Sie den Anruf zu dieser Seite über a add_action( 'wp', 'auto_login' );
(Wir müssen dies tun, bevor irgendetwas über ‘Header’ gesendet wird)

Die auto_login-Funktion kann dann Ihre Anfrage zur automatischen Anmeldung des angegebenen Benutzers verarbeiten (über $_GET-Parameter).

Wenn ich also auf die neue Seite umleite, übergebe ich zwei Parameter user_id (den Benutzer zum Anmelden) einen geheimen Schlüssel (zur Sicherheit)

$key =  password_hash('[some secret ]' . $user_id, PASSWORD_DEFAULT);

        wp_redirect( get_permalink( $to['fl_autologin'] ) . "/?p=" . urlencode( $key ) . "&z=" . $user_id );
        exit;

Dann suche ich in der Funktion auto_login nach diesen beiden Parametern, um den geheimen Schlüssel zu entschlüsseln, um zu prüfen, ob dies in Ordnung ist

            if ( $_GET['z'] && password_verify( '[some secret]' . $_GET['z'], urldecode( $_GET['p'] ) )) {

Wenn ja, melden Sie sich mit dem angegebenen Benutzer an

$user    = get_user_by( 'id', $_GET['z'] );
            $user_id = $user->ID;
wp_set_current_user( $user_id, $user->user_login );
            wp_set_auth_cookie( $user_id );

            do_action( 'wp_login', $user->user_login );

Führen Sie weitere Sicherheitsüberprüfungen durch, z. B. muss user_id gültig sein usw. Wenn alles in Ordnung ist, können Sie ihn erneut auf eine Homepage umleiten

Ich hoffe, das hilft Ihrem Problem

914900cookie-checkphp wordpress passwort ändern – mich abmelden!

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy