Bonjour à toutes et tous,

J’aimerais créer un système de "remember me" pour l'espace membre que je développe actuellement avec CakePHP.

J'essaie tant bien que mal d'enregistrer des données dans le cookie mais je n'y arrive pas...

J'ai bien associé le composant "Cookie" à mon contrôleur et j'ai mis en place le code suivant (voir les commentaires) :

//Le cookie est vide je le remplis
public function setcook() {
    $this->Cookie->write('Auth.User.prenom', 'Larry', false, 3600);
    var_dump($this->Cookie->read('Auth.User.prenom'));// je constate que les données sont bien enregistrés
    die();
}
//Je récupère la valeur 
public function getcook() {

    var_dump($this->Cookie->read('Auth.User.prenom'));//resultat => NULL
        die();
}

Qui peut me dite comment maitriser ce foutus composant ?? Merci d'avance pour votre aide.

2 réponses


Soundboy39
Auteur
Réponse acceptée

Merci Bahamut pour la réponse

En fait ça fonctionne si je ne fais pas de "die()", donc mon problème venait de là... peut être que le cookie n'a pas le temps de s'écrire.
C'est le coup de p... , mais bon l'essentiel c'est de s'en rendre compte.

Bonsoir,

Voici comment moi j'ai fait :
UsersController.php :

public function login(){
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                if ($this->request->data'User']'rememberMe'] == 1) {
                    unset($this->request->data'User']'rememberMe']);
                    $this->request->data'User']'password'] = $this->Auth->password($this->request->data'User']'password']);
                    $this->Cookie->write('rememberMeCookie', $this->request->data'User'], true, '2 weeks');
                }
                $this->Session->setFlash("Vous êtes maintenant connecté","alert", array(
                    'plugin' => 'BoostCake',
                    'class' => 'alert-success autoclose'
                ));
                $this->redirect('/');
            }else{
                $this->Session->setFlash("Identifiants incorrects","alert", array(
                    'plugin' => 'BoostCake',
                    'class' => 'alert-danger autoclose'
                ));
            }
        }
    }

AppController.php :

public function beforeFilter() {
        parent::beforeFilter();
        if (!$this->Auth->loggedIn() && $this->Cookie->read('rememberMeCookie')) {
            $cookie = $this->Cookie->read('rememberMeCookie');
            $user = $this->User->find('first', array(
                'conditions' => array(
                    'User.mail' => $cookie'mail'],
                    'User.password' => $cookie'password']
                )
            ));
            if ($user && !$this->Auth->login($user'User'])) {
                $this->redirect('/users/logout'); // destroy session & cookie
            }
        }
    }

Cordialement :)