web-dev-qa-db-fra.com

Enregistrer l'utilisateur via un script externe et un mot de passe aléatoire

J'ai ce script PHP que je souhaite appeler depuis une application mobile, qui enregistre une adresse e-mail, utilise un mot de passe aléatoire, puis active automatiquement et demande à l'utilisateur de réinitialiser le mot de passe lors de la première connexion.

Voici le tableau de données $ que je passe à la fonction de registre serModelRegistration:

$data = array( 
  'username' => $username,
  'name' => $name,
  'email1' => $email,
  'password1' => $password, // First password field
  'password2' => $password, // Confirm password field
  'sendEmail'  => '0',
  'block' => '0',
  'activation' => '0',
  'groups' =>array("2","10"));

Les paramètres sendEmail, activation et groups ne font pas vraiment quoi que ce soit ... essayé de les changer, en utilisant au lieu de '0' et joué avec l'ordre, mais rien aidé.

Est-ce possible?

Si ce n'est pas le cas, y a-t-il moyen de faire une simple inscription par courrier électronique qui enregistre le courrier et demande une réinitialisation du mot de passe?

3
Laureant

Je ne pense pas qu'il y ait un moyen, dans le noyau Joomla, de forcer une réinitialisation du mot de passe. Il y a cependant pas mal d'extensions pour ce genre de chose.

Je pense que la valeur d'activation ne fera rien, si vous créez un utilisateur à partir de l'objet JUser.

Je pense que le paramètre sendEmail devrait fonctionner, en termes d'envoi à l'utilisateur de leurs détails. Vérifiez les options dans le Gestionnaire des utilisateurs. Peut-être que "Envoyer le mot de passe" est défini sur "Non". Il se peut qu’elle soit définie sur Non, ce qui annule votre paramètre. Il se peut également qu'il y ait un problème d'envoi de courrier électronique par le serveur. Vous pouvez le tester dans "Configuration globale", sous l'onglet "Serveur", en cliquant sur le bouton "Envoyer un courrier test" en bas à droite. Cela montrera si le serveur envoie bien le courrier et si vous recevez le message de test, il ne sera pas pris dans les filtres anti-spam.

Vous pouvez simplement envoyer le courrier à l'utilisateur vous-même, à partir de votre script, avec quelque chose comme ...

<?php  
$data = array( 
  'username' => $username,
  'name' => $name,
  'email1' => $email,
  'password1' => $password, // First password field
  'password2' => $password, // Confirm password field
  'sendEmail'  => '0',
  'block' => '0',
  'activation' => '0',
  'groups' =>array("2","10")
);

$user = new JUser;
if ($user->bind($data)) {
    if ($user->save()) {
        echo "user created <br/>";

        # welcome message
        $welcome_email = "Welcome . " . $name . "\n"
        $welcome_email .= "Your username is . " . $username . "\n"
        $welcome_email .= "Your password is . " . $password . "\n"        

        # email set-up
        $config = JFactory::getConfig();
        $sender = array( 
            $config->get( 'mailfrom' ),
            $config->get( 'fromname' ) 
        );
        $mailer = JFactory::getMailer();
        $mailer->setSender($sender);    
        $mailer->isHTML(false);     

        # send the email
        $mailer->addRecipient($email);
        $mailer->setSubject('Your user account is created');
        $mailer->setBody($welcome_email);
        $send = $mailer_admin->Send();
        if ( $send !== true) {
            echo "Admin email failed: \n" . print_r(error_get_last(), true) . "<br/>";
            echo "send toString: \n" . $send->__toString() . "<br/>";
        } else {
            echo "Admin email sent<br/>";
        }
    } else {
        echo "create error " . $user->getError() . "<br/>";
    }    
} else {
    echo "bind error " . $user->getError() . "<br/>";
}               
?>

Tout ce qui précède concerne Joomla 3.6.4, il peut varier pour les anciennes versions.

J'espère que cela vous sera utile, faites-le moi savoir si vous avez des questions d'idées. :)

2
AndyGaskell