it-swarm.com.de

Erzwingen Sie, dass der Benutzer sein Kennwort beim ersten Anmelden an der Site unter Verwendung eines Shortcodes ändert

Ich arbeite an einem WP 4.9.8 und suche nach einem Skript, mit dem Benutzer gezwungen werden, ihr Kennwort beim ersten Aufrufen der Website zu ändern. Es handelt sich um eine Unternehmenswebsite. Benutzer werden durch Import einer CSV-Datei mit falscher E-Mail hinzugefügt. Die E-Mail kann nicht geändert werden.

Das Formular zum Ändern des Kennworts muss sich auf einer Seite befinden. Es kann sich nicht um die Seite profile.php handeln.

Ich habe den Code von Simon Blackbourn gefunden ( https://github.com/lumpysimon/wp-force-password-change ), aber:

  • das Formular ist in einem Seitenmodell und ich möchte, dass ein Shortcode es auf einer Seite anzeigt, die mit Elementor erstellt wurde. Ich weiß nicht, wie ich diesen Shortcode erstellen soll
  • das Formular wird bei der ersten Verknüpfung gut angezeigt, aber nach dem Absenden passiert nichts.
  • die Weiterleitung nach erfolgreicher Übermittlung muss abhängig von der Benutzerrolle eine andere Seite sein (ich habe 3 Benutzerrollen erstellt: National Manager, Agency Manager, Personal). Ich habe Peters Rollenumleitung installiert (wenn ich mich gut an den Namen des Plugins erinnere)

Ich habe ein Plugin auf der WP Website gefunden, aber es öffnet die profile.php Seite (Force change password).

Ich habe den Code auf der Seite pippinsplugins ( https://pippinsplugins.com/change-password-form-short-code/ ) gefunden, auf der das Formular mit dem Shortcode angezeigt wird.

Aber ich weiß nicht, wie ich mit ihnen umgehen soll, um das zu tun, was ich brauche. Vielen Dank und tut mir leid, wenn ich nicht sehr verständlich bin, ich bin Franzose ;-)


Ich denke, ich werde verrückt :-( Nichts funktioniert. Die Anmeldeseite ist eine benutzerdefinierte Seite mit einem Shortcode, der das Formular anzeigt. 1. Die Weiterleitung mit dem Plugin Passwortänderung erzwingen funktioniert nicht. Es ist in Ordnung, wenn Peters Weiterleitung mit aktiviert ist Der Link zur Seite zum Ändern des Passworts. Ich versuche es auf andere Weise. Wenn ich keinen Fehler mehr habe, ist es nicht gut. Der Benutzer ist angemeldet, wird aber nicht zur Seite zum Ändern des Passworts weitergeleitet. Es ist immer die Seite mit dem Formular zu Der letzte Test, den ich durchgeführt habe, ist mit diesem Plugin in Force Change Password, indem nach wp_get_current_user () Zeilen hinzugefügt wurden:

function force_password_change_redirect() {

    global $current_user;

    if ( is_admin() ) {
        $screen = get_current_screen();
        if ( 'profile' == $screen->base )
            return;
        if ( 'plugins' == $screen->base )
            return;
    }

    if ( !is_user_logged_in() )
        return;

    wp_get_current_user();
if( isset($user->ID) ) {
     $changed_password = get_user_meta( $current_user->ID, 'force-password-change', true ) ;
  if( $changed_password == true ) {
        return get_site_url('/changement-mdp/');
        } else {
         return $redirect_to;
       }
        }
}
  1. Ich habe eine Zeile in den Pippin-Code eingefügt, um die Änderung des Usermeta-Passworts nach dem Ändern zu löschen, aber es funktioniert nicht. Kein Fehler aber ich sehe immer diesen meta_key und dessen Wert in der Datenbank

    if (leer ($ errors)) {// ändere das Passwort hier $ user_data = array ('ID' => $ user_ID, 'user_pass' => $ _POST ['pippin_user_pass']); wp_update_user ($ user_data); delete_user_meta ($ user_id, 'Passwortänderung erzwingen', 1); // Passwortänderungs-E-Mail hier senden (wenn WP nicht) wp_redirect (add_query_arg ('password-reset', 'true', $ _POST ['pippin_redirect']); Ausfahrt; }

  2. Die Umleitung nach erfolgter Passwortänderung funktioniert nicht. Das Passwort wurde geändert, aber ich komme zurück auf die Seite, um das Passwort zu ändern.

Ich habe die Umleitung von Peter installiert, um Benutzer anhand ihrer Rolle umzuleiten. Wie kann ich ihn umleiten, NACHDEM er sein Passwort geändert hat und nicht vorher?

Vielen Dank für die Hilfe, die ich völlig verloren habe!


Edit 19. Dezember

Ich bin immer auf der Suche nach einer Lösung. Ich habe versucht, das Force Change Password-Plugin zu ändern, indem ich den Code von pippinplugins hinzufügte. Aber es gibt sicherlich viele Fehler, da ich im Frontend und im Admin eine weiße Seite habe. Könnten Sie mir helfen, die Fehler zu finden?

Danke vielmals

<?php
/*
Plugin Name:  Force Password Change
Description:  Require users to change their password on first login.
Version:      0.6
License:      GPL v2 or later
Plugin URI:   https://github.com/lumpysimon/wp-force-password-change
Author:       Simon Blackbourn
Author URI:   https://Twitter.com/lumpysimon
Author Email: [email protected]
Text Domain:  force-password-change
Domain Path:  /languages/



About this plugin
-----------------

This plugin redirects newly-registered users to the Admin -> Edit Profile page when they first log in.
Until they have changed their password, they will not be able to access either the front-end or other admin pages.
An admin notice is also displayed informing them that they must change their password.

New administrators must also change their password, but as a safety measure they can also access the Admin -> Plugins page.

Please report any bugs on the WordPress support forum at http://wordpress.org/support/plugin/force-password-change or via GitHub at https://github.com/lumpysimon/wp-force-password-change/issues

Development takes place at https://github.com/lumpysimon/wp-force-password-change (all pull requests will be considered)



About me
--------

I'm Simon Blackbourn, co-founder of Lumpy Lemon, a small & friendly UK-based
WordPress design & development company specialising in custom-built WordPress CMS sites.
I work mainly, but not exclusively, with not-for-profit organisations.

Find me on Twitter, Skype & GitHub: lumpysimon



License
-------

Copyright (c) Lumpy Lemon Ltd. All rights reserved.

Released under the GPL license:
http://www.opensource.org/licenses/gpl-license.php

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.



*/



$force_password_change = new force_password_change;



class force_password_change {



// just a bunch of functions called from various hooks
function __construct() {

    add_action( 'init',                    array( $this, 'init' ) );
    add_action( 'user_register',           array( $this, 'registered' ) );
    add_action( 'personal_options_update', array( $this, 'updated' ) );
    add_action( 'template_redirect',       array( $this, 'redirect' ) );
    add_action( 'current_screen',          array( $this, 'redirect' ) );
    add_action( 'admin_notices',           array( $this, 'notice' ) );

}



// load localisation files
function init() {

    load_plugin_textdomain(
        'force-password-change',
        false,
        dirname( plugin_basename( __FILE__ ) ) . '/languages'
        );

}



// on ajoute un champ meta dans la table users_meta avec la valeur 1 lors de l'enregistrement
function registered( $user_id ) {

    add_user_meta( $user_id, 'force-password-change', 1 );

}
    // on efface cette valeur quand le mot de passe a été changé
function updated( $user_id ) {

    if($_POST['pippin_user_pass'] == $_POST['pippin_user_pass_confirm']) {

    delete_user_meta( $user_id, 'force-password-change' );
    }
}

/*shortcode pour modifier le mdp*/
function pippin_change_password_form() {
global $post;

if (is_singular()) :
    $current_url = get_permalink($post->ID);
else :
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") $pageURL .= "s";
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    else $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    $current_url = $pageURL;
endif;
if(empty($errors)){
$redirect = home_url();}
else {
$redirect = $current_url;}

ob_start();

    // afficher les éventuelles erreurs lors de la saisie du nouveau mot de passe
    pippin_show_error_messages(); ?>

    <?php if(isset($_GET['password-reset']) && $_GET['password-reset'] == 'true') { ?>
        <div class="pippin_message success">
            <span><?php _e('Password changed successfully', 'rcp'); ?></span>
        </div>
    <?php } ?>
    <form id="pippin_password_form" method="POST" action="<?php echo esc_url($url); ?>">
        <fieldset>
            <p>
                <label for="pippin_user_pass"><?php _e('New Password', 'rcp'); ?></label>
                <input name="pippin_user_pass" id="pippin_user_pass" class="required" type="password"/>
            </p>
            <p>
                <label for="pippin_user_pass_confirm"><?php _e('Password Confirm', 'rcp'); ?></label>
                <input name="pippin_user_pass_confirm" id="pippin_user_pass_confirm" class="required" type="password"/>
            </p>
            <p>
                <input type="hidden" name="pippin_action" value="reset-password"/>
                <input type="hidden" name="pippin_redirect" value="<?php echo $redirect; ?>"/>
                <input type="hidden" name="pippin_password_nonce" value="<?php echo wp_create_nonce('rcp-password-nonce'); ?>"/>
                <input id="pippin_password_submit" type="submit" value="<?php _e('Change Password', 'pippin'); ?>"/>
            </p>
        </fieldset>
    </form>
<?php
return ob_get_clean();
}

// le formulaire de modification de mot de passe
function pippin_reset_password_form() {
if(is_user_logged_in()) {
    return pippin_change_password_form();
}
}
add_shortcode('password_form', 'pippin_reset_password_form');


// si:
// - on est loggé,
// - le champ meta est présent pour cet utilisateur,
// - on est sur le front-end ou n'importe quel écran sauf la page d'édition de profil ou plugins,
// alors on redirige vers la page de changement de mot de passe (modif code Force Password Change)
function force_password_change_redirect() {

    global $current_user;

    if ( is_admin() ) {
        $screen = get_current_screen();
        if ( 'profile' == $screen->base )
            return;
        if ( 'plugins' == $screen->base )
            return;
    }

    if ( !is_user_logged_in() )
        return;

    wp_get_current_user();

     $changed_password = get_user_meta( $current_user->ID, 'force-password-change', true ) ;
  if( $changed_password == true ) {
        return get_site_url('/changement-mdp/');
        } else {
         return $redirect_to;
       }

}

function pippin_reset_password() {
// reset a users password
if(isset($_POST['pippin_action']) && $_POST['pippin_action'] == 'reset-password') {

    global $user_ID;

    if(!is_user_logged_in())
        return;

    if(wp_verify_nonce($_POST['pippin_password_nonce'], 'rcp-password-nonce')) {

        if($_POST['pippin_user_pass'] == '' || $_POST['pippin_user_pass_confirm'] == '') {
            // password(s) field empty
            pippin_errors()->add('password_empty', __('Please enter a password, and confirm it', 'pippin'));
        }
        if($_POST['pippin_user_pass'] != $_POST['pippin_user_pass_confirm']) {
            // passwords do not match
            pippin_errors()->add('password_mismatch', __('Passwords do not match', 'pippin'));
        }

        // retrieve all error messages, if any
        $errors = pippin_errors()->get_error_messages();

        if(empty($errors)) {
            // change the password here
            $user_data = array(
                'ID' => $user_ID,
                'user_pass' => $_POST['pippin_user_pass']
            );
    delete_user_meta( $user_id, 'force-password-change',1 );
            wp_update_user($user_data);

            // send password change email here (if WP doesn't)
            wp_redirect(add_query_arg('password-reset', 'true', $_POST['pippin_redirect']));
            exit;
        }
    }
}
}
add_action('init', 'pippin_reset_password');

if(!function_exists('pippin_show_error_messages')) {
// displays error messages from form submissions
function pippin_show_error_messages() {
    if($codes = pippin_errors()->get_error_codes()) {
        echo '<div class="pippin_message error">';
            // Loop error codes and display errors
           foreach($codes as $code){
                $message = pippin_errors()->get_error_message($code);
                echo '<span class="pippin_error"><strong>' . __('Error', 'rcp') . '</strong>: ' . $message . '</span><br/>';
            }
        echo '</div>';
    }
}
}

if(!function_exists('pippin_errors')) {
// used for tracking error messages
function pippin_errors(){
    static $wp_error; // Will hold global variable safely
    return isset($wp_error) ? $wp_error : ($wp_error = new WP_Error(null, null, null));
}
}
// if the user meta field is present, display an admin notice
function notice() {

    global $current_user;

    wp_get_current_user();

    if ( get_user_meta( $current_user->ID, 'force-password-change', true ) ) {
        printf(
            '<div class="error"><p>%s</p></div>',
            __( 'Please change your password in order to continue using this website', 'force-password-change' )
            );
    }

}



} // class

Danke für Ihre Hilfe !

1
user2898349

Sie haben fast alles, was Sie bereits benötigen (vorausgesetzt, die oben aufgeführten Plugins funktionieren). Sie müssen sie nur verknüpfen:

  1. Aktiviere pippins Passwort ändern Plugin & erstelle eine Seite mit dem Shortcode dafür. Testen Sie, ob auf dieser Seite ein angemeldeter Benutzer sein Kennwort ändern kann. Notieren Sie die URL der Seite und ändern Sie sie NICHT.
  2. Bearbeiten Sie nun das Plugin für die Änderung des Passworts (oder überprüfen Sie, ob Sie die URL in einer Einstellung angeben können). Suchen Sie den Teil, in dem die URL angegeben ist, zu der immer umgeleitet werden soll. Du hast gesagt, es ist die profile.php? Ändern Sie diese URL in die von Ihnen erstellte Seite. Speichern, hochladen, aktivieren, testen.

Wenn beide Plugins und es so klingt, als würden sie das tun, was Sie beschrieben haben, dann sollte es das tun.

Es ist immer eine gute Idee zu testen, ob ein Benutzer, der sich abgemeldet und erneut angemeldet hat, sein Kennwort nicht erneut ändern muss, wenn er gezwungen wurde, es zu ändern. ;)

1
anmari