web-dev-qa-db-ger.com

Passwortänderung, wenn der Benutzer sich zum ersten Mal anmeldet

Ich habe eine Seite "Passwort ändern".

Gibt es eine Möglichkeit, diese Seite umzuleiten, wenn der Benutzer login first time ein von WordPress generiertes Passwort verwendet?

Vielen Dank

4
Giri

Vielleicht hilft dir das?

https://stackoverflow.com/questions/4267285/redirect-user-after-first-login-in-wordpress

Er scheint ein ähnliches Problem zu haben und hat es vor einem Jahr gelöst.

Was er anders macht als Sie, ist die Umleitung 48 Stunden nach der Registrierung. Vielleicht ist das genug?

Wenn nicht, dann mache ich es wie du willst.

--- BEARBEITEN

Okay, ich habe gerade ein Plugin erstellt, das genau das macht, was du willst:

/*
 Plugin Name: Redirect Passwort
Plugin URI: TODO
Description: TODO
Author: xaeDes
Version: 0.1
Author URI: TODO
License: GPL2
*/

function redirect_passwort_profile_update($user_id, $old_user_data) {
    $user = new WP_User( $user_id );
    if( $user->data->user_pass != $old_user_data->user_pass) {
        //password has changed
        update_metadata("user",$user_id,"changed_password",true);
    }
}
add_action("profile_update", "redirect_passwort_profile_update", 10, 2);

function redirect_passwort_login_redirect($redirect_to, $url_redirect_to = '', $user = null) {

    if( isset($user->ID) ) {
        $changed_password = get_metadata("user", $user->ID, "changed_password",true);
        if( $changed_password != true ) {
            return get_bloginfo('url') . "/change-your-password-dude/";
        } else {
            return $redirect_to;
        }
    }
}
add_filter('login_redirect', 'redirect_passwort_login_redirect',10,3);

function redirect_passwort_password_reset( $user ) {
    //password has been reset to a random one. so the changed_password meta data should be reset as well
    if( isset($user->ID) ) {
        delete_metadata("user", $user->ID, "changed_password");
    }
}
add_action('password_reset', 'redirect_passwort_password_reset');

Er fügt dem Benutzer, der sein Kennwort geändert hat, die Benutzer-Metadaten "changed_password" hinzu.

Bei der Anmeldung wird geprüft, ob die Benutzer-Metadaten "changed_password" gesetzt sind, und umgeleitet, wenn sie nicht gesetzt sind (und der Benutzer hat daher sein Passwort auch nicht einmal geändert).

Wenn das Benutzerpasswort auf ein zufälliges Passwort zurückgesetzt wird, werden auch die Benutzer-Metadaten "changed_password" zurückgesetzt.

3
xaedes

Haken Sie user_register und Benutzer-Metadaten hinzufügen an, um ein Flag "Noch nicht angemeldet" zu speichern. Hängen Sie wp_login ein und prüfen Sie, ob diese Metadaten vorhanden sind. Löschen Sie sie und leiten Sie sie um, falls vorhanden. Anderenfalls führen Sie ein normales Anmeldeverhalten aus.

2
Milo

Zusätzlich zu Milos Antwort:

    function after_user_register( $user_id ){

        // the new user just registered but never logged in yet
        add_user_meta($user_id, "has_not_logged_in_yet", "true", true);
    }

    add_action( 'user_register', 'after_user_register', 10, 1 );

    function after_user_loggedin(){

        if(is_user_logged_in()){

            $user_id=get_current_user_id();

            $user_meta=get_user_meta($user_id);

            if(isset($user_meta['has_not_logged_in_yet'])){

                delete_user_meta($user_id, "has_not_logged_in_yet");

                //do something else
            }
        }
    }

    add_action( 'init', 'after_user_loggedin');

Bearbeiten (FYI)

Hook wp_login schneidet beim Abrufen von Benutzer-Metas nicht besonders gut ab. Gibt manchmal FALSE mit dem angemeldeten Benutzer zurück.

0
RafaSashi