benlvt Posted December 12, 2013 Share Posted December 12, 2013 Bonjour à tous, Un client me demande de raccourcir le fastidieux processus de changement de mot de passe. J'ai beau lui dire que prestashop est fait comme ça, il ne veut rien entendre. Est-ce possible de faire en sorte que lorsqu'un utilisateur va sur Mot de passe oublié, il renseigne son mail et il reçoit dès le premier mail son nouveau mot de passe? (c'est à dire suppression de l'étape avec le premier mail et le lien de type mot-de-passe-oublie?token=e999417c4fe4a5e4feb2a0f75b6037b8&id_customer=726 mais de mettre cette action sur le premier bouton "recuperer") Si oui, comment dois-je m'y prendre? Sinon pouvez vous m'expliquer concrétement ce qui empêche de faire cela pour m'aider à la convaincre de laisser tomber avec cette histoire de mot de passe Merci d'avance. Link to comment Share on other sites More sharing options...
benlvt Posted December 12, 2013 Author Share Posted December 12, 2013 J'ai réussi en mettant mon fichier password.php sous cette forme : public function postProcess(){ if (Tools::isSubmit('email')) { if (!($email = trim(Tools::getValue('email'))) || !Validate::isEmail($email)) $this->errors[] = Tools::displayError('Invalid email address.'); if ($email) { $customer = new Customer(); $customer->getByemail($email); if (!Validate::isLoadedObject($customer)) $this->errors[] = Tools::displayError('Customer account not found'); elseif (!$customer->active) $this->errors[] = Tools::displayError('You cannot regenerate the password for this account.'); elseif ((strtotime($customer->last_passwd_gen.'+'.(int)($min_time = Configuration::get('PS_PASSWD_TIME_FRONT')).' minutes') - time()) > 0) $this->errors[] = sprintf(Tools::displayError('You can regenerate your password only every %d minute(s)'), (int)$min_time); else { $customer->passwd = Tools::encrypt($password = Tools::passwdGen(MIN_PASSWD_LENGTH)); $customer->last_passwd_gen = date('Y-m-d H:i:s', time()); if ($customer->update()) { Hook::exec('actionPasswordRenew', array('customer' => $customer, 'password' => $password)); $mail_params = array( '{email}' => $customer->email, '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{passwd}' => $password ); if (Mail::Send($this->context->language->id, 'password', Mail::l('Your new password'), $mail_params, $customer->email, $customer->firstname.' '.$customer->lastname)) $this->context->smarty->assign(array('confirmation' => 1, 'email' => $customer->email)); else $this->errors[] = Tools::displayError('An error occurred while sending the email.'); } else $this->errors[] = Tools::displayError('An error occurred with your account, which prevents us from sending you a new password. Please report your this issue using the contact form.'); } } else $this->errors[] = Tools::displayError('We cannot regenerate your password with the data you\'ve submitted.'); } /* elseif (Tools::isSubmit('email')) { if (!($email = trim(Tools::getValue('email'))) || !Validate::isEmail($email)) $this->errors[] = Tools::displayError('Invalid email address.'); else { $customer = new Customer(); $customer->getByemail($email); if (!Validate::isLoadedObject($customer)) $this->errors[] = Tools::displayError('There is no account registered for this email address.'); elseif (!$customer->active) $this->errors[] = Tools::displayError('You cannot regenerate the password for this account.'); elseif ((strtotime($customer->last_passwd_gen.'+'.(int)($min_time = Configuration::get('PS_PASSWD_TIME_FRONT')).' minutes') - time()) > 0) $this->errors[] = sprintf(Tools::displayError('You can regenerate your password only every %d minute(s)'), (int)$min_time); else { $mail_params = array( '{email}' => $customer->email, '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{url}' => $this->context->link->getPageLink('password', true, null, 'token='.$customer->secure_key.'&id_customer='.(int)$customer->id) ); if (Mail::Send($this->context->language->id, 'password_query', Mail::l('Password query confirmation'), $mail_params, $customer->email, $customer->firstname.' '.$customer->lastname)) $this->context->smarty->assign(array('confirmation' => 2, 'email' => $customer->email)); else $this->errors[] = Tools::displayError('An error occurred while sending the email.'); } } }*/ elseif (Tools::getValue('token') || Tools::getValue('id_customer')) $this->errors[] = Tools::displayError('We cannot regenerate your password with the data you\'ve submitted.'); } Désormais l'utilisateur qui demande à récupérer reçoit immédiatement un nouveau mot de passe. Qu'en pensez vous? Quels sont les risques en terme de sécurité? Link to comment Share on other sites More sharing options...
Gregory Roussac Posted December 13, 2013 Share Posted December 13, 2013 Hello, Il faut mieux "surcharger" un controlleur plutot que modifier celui du coeur. En cas de mise à jour votre modification restera. Sinon pas de soucis. Cordialement Link to comment Share on other sites More sharing options...
benlvt Posted December 13, 2013 Author Share Posted December 13, 2013 hello! Merci pour le feedback, pour faire un override d'un controleur je dois m'y prendre de quelle manière en fait? C'est une manip que je ne maitrise pas des masses! Link to comment Share on other sites More sharing options...
Gregory Roussac Posted December 13, 2013 Share Posted December 13, 2013 De ce coté là je pense par ce que ça peut être assez long a expliquer http://doc.prestashop.com/display/PS15/Overriding+default+behaviors Cordialement Link to comment Share on other sites More sharing options...
benlvt Posted December 13, 2013 Author Share Posted December 13, 2013 merci je devrai pouvoir me débrouiller avec ça! Link to comment Share on other sites More sharing options...
Whoami Posted December 13, 2013 Share Posted December 13, 2013 Bonjour à tous, Un client me demande de raccourcir le fastidieux processus de changement de mot de passe. J'ai beau lui dire que prestashop est fait comme ça, il ne veut rien entendre. Est-ce possible de faire en sorte que lorsqu'un utilisateur va sur Mot de passe oublié, il renseigne son mail et il reçoit dès le premier mail son nouveau mot de passe? (c'est à dire suppression de l'étape avec le premier mail et le lien de type mot-de-passe-oublie?token=e999417c4fe4a5e4feb2a0f75b6037b8&id_customer=726 mais de mettre cette action sur le premier bouton "recuperer") Si oui, comment dois-je m'y prendre? Sinon pouvez vous m'expliquer concrétement ce qui empêche de faire cela pour m'aider à la convaincre de laisser tomber avec cette histoire de mot de passe Merci d'avance. Bonjour, Tout bêtement la chose suivante, le type de boutique est-elle du B to B, sur un secteur concurrentiel ? Si oui (ou non d'ailleurs, mais oui appuierait plus), n'importe quel utilisateur un peu malin qui veut pourrir son concurent ou voisin n'aura qu'à entrer son adresse mail en boucle toutes les heures pour changer le mot de passe automatiquement et spammer la boite mail. En augmentant la valeur de régénération de mot de passe, certains vont revenir en disant : Oui mais on ne peut pas régénérer deux fois par semaine. En diminuant cette valeur, on pourra lancer le petit, même tout les 3 jours, c'est suffisant pour être dérangeant (imaginez que votre mot passe soit régénéré tous les 3 jours). La méthode utilisée par Prestashop est une des plus rentable sur le rapport temps/sécurité (sans compter qu'elle est relativement standard un peu partout). A noter que comme le mot de passe est hashé, il n'est pas possible de le récupérer (seulement de le régénérer). Je dis ça parceque j'ai déjà eu ce type de demande, deux mois après le client revenait sur sa décision après avoir reçu plusieurs plaintes Link to comment Share on other sites More sharing options...
benlvt Posted December 13, 2013 Author Share Posted December 13, 2013 Hello! Je l'ai informé de ça mais bon il ne veut rien savoir >> son pb. (je le vois bien faire comme votre client et revenir sur sa décision! ) Après c'est du BtoC et avec des produits qui ne se trouvent pas des masses sur le web à part sur des sites spécialisés pour chacun des produits qu'il vend, donc le risque de se faire emmerder par un concurrent est minime selon moi. Le truc que je craignais le plus, n'étant pas franchement un expert en sécurité, c'était de modifier ce process et de supprimer la notion de token dont je dois avouer ne pas bien comprendre le principe! Si vous me dites que le risque de se faire hacker des comptes clients n'est pas plus grand comme ça, ça me va, c'est tout ce que je voulais entendre. Le risque de se faire spammer/réinitialiser son mdp par un tiers il en est conscient. (Et pour info la régénération est fixée à 360mn!! Même ca il ne veut peut l'augmenter!) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now