web-dev-qa-db-fra.com

Le mot de passe change lorsque l'utilisateur se connecte pour la première fois

J'ai une page "changer le mot de passe".

Y a-t-il un moyen de rediriger cette page lorsque l'utilisateur login first time utilisant le mot de passe généré par wordpress?

Merci

4
Giri

Peut-être que cela vous aide?

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

Il semble avoir eu un problème similaire et l'a résolu il y a un an.

Ce qu’il fait différemment à votre approche est de rediriger 48 heures après l’enregistrement. Peut-être que cela suffit?

Sinon, je compte le faire à votre façon.

--- MODIFIER

Ok je viens de faire un plugin ce qui fait exactement ce que vous voulez:

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

Il ajoute une métadonnée utilisateur "modified_password" à l'utilisateur qui a modifié son mot de passe.

Lors de la connexion, il vérifie si les métadonnées de l'utilisateur "mot_de_passe_modifié" est défini et redirige s'il n'est pas défini (l'utilisateur n'a donc pas changé son mot de passe, même une fois).

Lorsque le mot de passe de l'utilisateur est réinitialisé à un nom aléatoire, les métadonnées de l'utilisateur "mot_de_passe_changé" sont également réinitialisées.

3
xaedes

Hook user_register et ajouter des métadonnées utilisateur pour stocker l'indicateur "ne s'est pas encore connecté". Accrochez wp_login et vérifiez ces métadonnées, supprimez-les et redirigez-les si elles existent, sinon faites-vous en respectant le comportement de connexion normal.

2
Milo

En plus de la réponse de Milo:

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

Modifier (FYI)

Hook wp_login ne fonctionne pas très bien en termes de récupération de méta utilisateur. Parfois, retourne FALSE avec l'utilisateur connecté.

0
RafaSashi