web-dev-qa-db-fra.com

Mot de passe protégé Voir profil

J'ai étendu la page de profil utilisateur dans le backend afin que chaque profil utilisateur comporte plusieurs champs personnalisés supplémentaires pour les données telles que les films préférés, les anniversaires, etc. peuvent être stockés. Créer un site de rencontre, c’est pourquoi plus de champs sont nécessaires. Les personnes possédant le code approprié peuvent voir ces profils dans le front-end en utilisant un code d'entrée qui est fondamentalement un code aléatoire plus un ID utilisateur comme numéro à la fin. Avec PHP sous-chaîne, l'ID utilisateur est saisi et l'accès est accordé. Voir code:

if(empty($_REQUEST['enterCodeId'])){
            echo "<script>
                location.replace('".$_SERVER['HTTP_REFERER']."'); 
                </script>";
    }else{
            $getId=substr($_REQUEST['enterCodeId'], 4, 10);
            $querystr ="SELECT ID FROM wp_prefixcode_users WHERE ID='".$getId."'";
            $querystrChecking = mysql_query($querystr);
            if(mysql_num_rows($querystrChecking)<=0){
                echo "<script>
                location.replace('".$_SERVER['HTTP_REFERER']."'); 
                </script>";
            }
            $uploads = wp_upload_dir(); 
        //
    }

Cette configuration n'est pas idéale car a: le code ne peut pas encore être ajouté à partir de la page de profil, ce qui peut être corrigé avec un get_the_author_meta() supplémentaire, mais j'ai besoin d'un meilleur moyen de générer un mot de passe, mais aussi parce que b: un mot de passe se terminera toujours par le même numéro d'utilisateur.

Comment puis-je donner aux utilisateurs la possibilité de générer automatiquement un mot de passe d'accès à partir du tableau de bord> Utilisateurs> Profil utilisateur afin que les utilisateurs puissent régénérer une nouvelle clé d'accès? Cela est nécessaire pour que l'accès donné à un autre utilisateur puisse être révoqué. J'ai besoin d'une fonction PHP pour générer une nouvelle clé et la stocker sous forme de champ author_meta dans la base de données.

Solution

Grâce à Toscho et à un autre développeur, j'ai obtenu ce code pour tout charger. Dans functions.php, j'ai ajouté:

add_action( 'init', 'accesskeygen_func' );

function accesskeygen_func() {
    $phpfile = explode('/', $_SERVER['PHP_SELF']);
    $phpfile = $phpfile[count($phpfile)-1];

    if (($phpfile=='profile.php') && isset($_GET['accesskeygen'])) {
        echo wp_generate_password();
        exit;
    }}

et

<!-- begin access key -->
<tr>
<th><label for="myaccesskey"><?php _e("Access Key"); ?></label></th>
<td>
<input type="text" name="myaccesskey" id="myaccesskey" value="<?php echo esc_attr( get_the_author_meta( 'myaccesskey', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description">
    <input type="button" class="button-secondary" id="myaccesskeygen" value="Generate Access Key"/>&nbsp;
    <?php _e("Please click the button generate access key."); ?>
</span>
</td>
</tr>
<!-- end access key -->
1
rhand

Utilisez wp_generate_password() pour générer des mots de passe. Par exemple, vous pouvez ajouter un bouton au profil de l'utilisateur pour obtenir un nouveau mot de passe par AJAX.

Et votre code actuel comporte une faille de sécurité: $getId, la sous-chaîne d'une demande de visiteur peut contenir du code malveillant. Toujours échapper les données de la demande. Lisez la validation des données pour plus d'informations, en particulier $wpdb->prepare() devrait être utile.

1
fuxia