Bonsoir à tous,

J'ai un problème plutôt étrange, lorsqu'un utilisateur souhaite créer un compte je lui envoie un mail avec l'adresse pour que son compte puisse être activé. Il reçoit bien le mail mais lorsqu'on clique sur le lien on a le message suivant:

The requested URL /cakephp/users/verify/t:4b358b48a46af1301c92f4bd0b21ec8a01160a10/n:sean87 was not found on this server.

Voici le lien que reçoit l'utilisateur: http://localhost/cakephp/users/verify/t%3A4b358b48a46af1301c92f4bd0b21ec8a01160a10%2Fn%3Asean87

Voici la fonction verify :

public function verify() {
        //check if the token is valid
        if (!empty($this->passedArgs'n']) && !empty($this->passedArgs't'])){
            $name = $this->passedArgs'n'];

            $tokenhash = $this->passedArgs't'];

            $results = $this->User->findByUsername($name);
            //check if the user is already activated
            if ($results'User']'active']==0){

                //check the token
                if($results'User']'tokenhash']==$tokenhash){
                    //Set activate to 1
                    $results'User']'active']=1;
                    //Save the data
                    $this->User->save($results);
                    $this->Session->setFlash(__('Your registration is complete'), 'alert', array(
                        'plugin' => 'TwitterBootstrap',
                        'class' => 'alert-sucess'
                        ));
                    $this->redirect('/users/login');
                    exit;
                }
            }
        }
    }

Voici le code de l'email :

<?php echo Router::url(array('controller' => 'users', 'action' => 'verify', $ms), true); ?>

Et enfin voici le bout de code de la fonction signup

public function signup() {
...           
    $hash=sha1($this->data'User']'username'].rand(0,100));
    $ms='t:'.$hash.'/n:'.$this->data'User']'username'];
    $ms=wordwrap($ms,70);
...
    }

Merci à tous d'avance!!!

2 réponses


Kareylo
Réponse acceptée

Il y a plus simple pour passer des paramètres dans l'url.
Premièrement, ta fonction verify se déclare comme ça :

public function verify($token = null, $username = null){}

Puis, tu envoies le lien comme suit : http://www.grafikart.fr/forum/posts/get/35684

<?php echo Router::url(array('controller' => 'users', 'action' => 'verify', 'token' => $hash, 'username', $this->data'User']'username']));

Ainsi, ta fonction verify devrait être comme ceci (je l'ai un peu améliorée) :

public function verify($token = null, $username = null) {
        if (!empty($token) && !empty($username)){

            // results va aller chercher un utilisateur avec le username $username et le token $token
            $results = $this->User->findByUsernameAndTokenhash($username, $token);
            // Si le résultat est vide, c'est que le token ou le username fournis sont incorrects
            if(empty($results){
                $this->Session->setFlash(__('This link is not valid'), 'alert', array(
                        'plugin' => 'TwitterBootstrap',
                        'class' => 'alert-error'
                ));
                return $this->redirect(array('action' => 'login'));
            }
            //check if the user is already activated
            if (!$results'User']'active']){
                    //Set activate to 1
                    $results'User']'active']=1;

                    //Save the data
                    $this->User->save($results);

                    $this->Session->setFlash(__('Your registration is complete'), 'alert', array(
                        'plugin' => 'TwitterBootstrap',
                        'class' => 'alert-sucess'
                        ));

                    return $this->redirect(array('action' => 'login'));
            } else {
                $this->Session->setFlash(__('Your account is already activated'), 'alert', array(
                        'plugin' => 'TwitterBootstrap',
                        'class' => 'alert-warning'
                ));
                return $this->redirect(array('action' => 'login'));
            }

        }
    }
Sean78
Auteur

Merciiiii