Bonjour à tous , voilà je suis le tutoriel du système de membre, tout va bien jusqu'au moment ou je fais ma fonction pour récupérez un mot de passe perdu : Je reçois bien mon courrier sur ma boite mail sauf que l'URL correspond a ceci : http://localhost/Cakephp/users/password/token %3a 1-4920d1c9726810ade35ed76f5bb3b7b0 alors qu'il devrais m'afficher un ( : ) au lieu du charabiat surligné en gras et je ne trouve pas la solution ! Merci a vous voici code de mon UsersController

<?php
class UsersController extends AppController{
    function password(){
        if(!empty($this->request->params'named']'token'])){
            $token = $this->request->params'named']'token'];
            $token = explode('-',$token);
            $user = $this->User->find('first',array(
                'conditions'=> array('id' => $token[0], 'MD5(User.password)' => $token[1],'active' => 1)
                ));
        if($user){
                    $this->User->id = $user'User']'id'];
                    $password = substr(md5(uniqid(rand(),true)),0,8);
                    $this->User->saveField('password',Security::hash($password,null,true));
                    $this->Session->setFlash("Votre mot de passe a correctement été modifié, voici le nouveau mot de passe $password","notif");
                }else{
                    $this->Session->setFlash("Ce lien n'est pas valide","notif");
                }
            }
        if($this->request->is('post')){
            $v = current($this->request->data);
            $user = $this->User->find('first',array(
                'conditions'=> array('mail'=>$v'mail'],'active'=>1)
                ));
                if(empty($user)){
                    $this->Session->setFlash("Cet email ne correspond à aucun utilisateur !","notif");
                }else{
                App::uses('CakeEmail','Network/Email');
                $link = array('controller'=>'users','action'=>'password','token'=>$user'User']'id'].'-'.md5($user'User']'password']));
                $mail = new CakeEmail();
                $mail->from('noreply@graphyweb.fr')
                ->to($user'User']'mail'])
                ->subject('Mot de passe oublié')
                ->emailFormat('html')
                ->template('mdp')
                ->viewVars(array('username'=>$user'User']'username'],'link'=>$link))
                ->send();
            }}} 
}
?>

8 réponses


UP :)

sa c'set bizarre mais comment ta fais pour avoir la table SQL avec token. Au debut il nous dit ce qu'il a mis dans la table (id,email,pass,token,active)
mais nous dis pas les valeur tu pourrai me passer la table SQL stp ! :)
je t'aurai bien aidez mais je suis bloquer avec la table sql LOL

j'ai le même problème, j'ai pas encore trouvé de solution, une idée pourquoi il converti les " : " en " %3a " ??

Salut,

Tu as quoi dans le layout de l'email?

A+

Dans layout -> emails -> html , il n'y a rien
Mais dans Emails -> html , j'ai mon ctp qui affiche une message tout con et un lien :

<?php echo $this->Html->link('nouveau mot de passe', $this->Html->url($link,true)); ?>

Salut,

Le problème vient du fait que tu mets :

$this->Html->url($link, true)

Pour faire simple, ceci crée ton lien avec les ":", ensuite tu le mets dans :

$this->Html->link();

et lui il voit les ":" donc les transformes.

Alors, j'ai cherché dans l'excellente doc cakephp et je tourne en rond pour trouver l'option qui évite ça, donc le mieux c'est de faire :

<?php echo urldecode($this->Html->link('nouveau mot de passe', $this->Html->url($link,true))); ?>

Perso, je trouve ça laid. Mais pas d'autres solutions en vue.

A++

Slt,
je viens de tester mais j'ai toujours le même problème
J'ai essayé de mettre le charset du config/email.php sur utf8 mais ça change rien non plus

Ok,

Tu peux tester :

<?php echo $this->Html->link('Nouveau mot de passe', $link); ?>

Juste pour voir si tu as les ":"?

A+