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!!!
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'));
}
}
}