CakePHP lembre-me de Auth

Eu usei com sucesso o Auth, mas, infelizmente, parece que ele funciona apenas com Session. Eu quero que se o usuário verificar a checkbox de seleção “Lembre-me”, eu usaria o Cookie e ele iria logar por 2 semanas. Não consigo encontrar nada no livro oficial e no Google eu encontrei apenas alguns e não ótimas postagens de blog. Existe alguma maneira de implementar isso sem rewrite o núcleo?

No seu controlador de usuário:

public function beforeFilter() { $this->Auth->allow(array('login', 'register')); parent::beforeFilter(); } public function login() { if ($this->request->is('post')) { if ($this->Auth->login()) { // did they select the remember me checkbox? if ($this->request->data['User']['remember_me'] == 1) { // remove "remember me checkbox" unset($this->request->data['User']['remember_me']); // hash the user's password $this->request->data['User']['password'] = $this->Auth->password($this->request->data['User']['password']); // write the cookie $this->Cookie->write('remember_me_cookie', $this->request->data['User'], true, '2 weeks'); } return $this->redirect($this->Auth->redirect()); } else { $this->Session->setFlash(__('Username or password is incorrect.')); } } $this->set(array( 'title_for_layout' => 'Login' )); } public function logout() { // clear the cookie (if it exists) when logging out $this->Cookie->delete('remember_me_cookie'); return $this->redirect($this->Auth->logout()); } 

Na visualização de login:

 

Login

< ?php echo $this->Form->create('User'); ?> < ?php echo $this->Form->input('username'); ?> < ?php echo $this->Form->input('password'); ?> < ?php echo $this->Form->checkbox('remember_me'); ?> Remember Me < ?php echo $this->Form->end('Login'); ?>

No seu AppController:

 public $components = array( 'Session', 'Auth', 'Cookie' ); public $uses = array('User'); public function beforeFilter() { // set cookie options $this->Cookie->key = 'qSI232qs*&sXOw!adre@34SAv!@*(XSL#$%)asGb$@11~_+!@#HKis~#^'; $this->Cookie->httpOnly = true; if (!$this->Auth->loggedIn() && $this->Cookie->read('remember_me_cookie')) { $cookie = $this->Cookie->read('remember_me_cookie'); $user = $this->User->find('first', array( 'conditions' => array( 'User.username' => $cookie['username'], 'User.password' => $cookie['password'] ) )); if ($user && !$this->Auth->login($user['User'])) { $this->redirect('/users/logout'); // destroy session & cookie } } } 

Veja este URL, eu acho que é muito útil para você.

http://lecterror.com/articles/view/cakephp-and-the-infamous-remember-me-cookie

Ou tente isso

 function login() { if ($this->Auth->user()) { if (!empty($this->data) && $this->data['User']['remember_me']) { $cookie = array(); $cookie['username'] = $this->data['User']['username']; $cookie['password'] = $this->data['User']['password']; $this->Cookie->write('Auth.User', $cookie, true, COOKIE_EXPIRE); unset($this->data['User']['remember_me']); } $this->LogDetail->Write('activity','has logged IN'); $this->redirect($this->Auth->redirect()); } if (empty($this->data)) { $cookie = $this->Cookie->read('Auth.User'); if (!is_null($cookie)) { if ($this->Auth->login($cookie)) { $this->Session->destroy('Message.Auth'); # clear auth message, just in case we use it. $this->LogDetail->Write('activity','has been authenticated via cookie and is now logged IN'); $this->redirect($this->Auth->redirect()); } else { $this->LogDetail->Write('activity','attempted to gain access with an invalid cookie'); $this->Cookie->destroy('Auth.User'); # delete invalid cookie $this->Session->setFlash('Invalid cookie'); $this->redirect('login'); } } } } 

Lembre-se de mim não é outra coisa senão a session identificada com um cookie, mas o tempo de vida do cookie é definido para o infinito. Olhe para Config / core.php para a vida útil do cookie da session.

Eu acho que você precisa saber sobre os níveis de segurança CakePHP. Tente diminuir a segurança do seu boloPHP. Documentação das variables ​​de configuração do CakePHP. Eu escrevi um blog sobre isso também há muito tempo.

você pode tentar isso

 if ($this->Auth->login()) { if (!empty($this->data['User']['remember'])) { $cookie = array(); $cookie['login'] = $this->data['User']['login']; $cookie['password'] = $this->data['User']['password']; $cookie['language'] =$this->data['User']['language']; $this->Cookie->write('Auth.projectname', $cookie, true, '+1 years'); unset($this->data['User']['remember']); 
  public function admin_login() { $this->layout = 'admin_login'; if (count($this->Session->read("Auth.User"))) { $usr = $this->Session->read("Auth.User"); if ($usr['role'] == 'A' || $usr['role'] == 'RA' || $usr['role'] == 'MAfA' || $usr['role'] == 'Af' || $usr['role'] == 'FAA') return $this->redirect(array('controller' => 'dashboard', 'action' => 'view')); } if ($this->request->is('post')) { if ($this->request->data['User']['remember_me']=="1") { // pr($this->request->data); // die('sdd'); $this->Cookie->write('username', $this->request->data['User']['username'], true, '1 year'); $this->Cookie->write('password', $this->request->data['User']['password'], true, '1 year'); } else { $this->Cookie->destroy(); } /* * Check if email or username is passed in form */ $uname = $this->request->data['User']['username']; //login via email if (filter_var($uname, FILTER_VALIDATE_EMAIL)) { $u = $this->User->findByemail($uname); } else { //login via username $u = $this->User->findByusername($uname); } if ($u) { $this->request->data['User']['username'] = $u['User']['username']; /* * * * Error if user is not active */ if ($u['User']['user_status'] != 'active') { $this->Session->setFlash(__('Sorry! Your account is not active.'), 'default', array('class' => 'alert alert-danger')); } elseif ($this->Auth->login()) { //if logged in $user_caps = $this->fetchCapabilitiesByRole($u['User']['role']); $this->Session->write("Auth.User.privileges", array('capabilities' => $user_caps['capabilities'], 'geo_areas' => array())); if ($u['User']['role'] == 'A' || $u['User']['role'] == 'RA' || $u['User']['role'] == 'Af' || $u['User']['role'] == 'MAfA' || $u['User']['role'] == 'FAA') return $this->redirect(array('controller' => 'dashboard', 'action' => 'view')); return $this->redirect($this->Auth->redirect()); }else { //if invalid $this->Session->setFlash(__('Invalid username or password.'), 'default', array('class' => 'alert alert-danger')); } } else {//if user does not exists $this->Session->setFlash(__('User does not exists.'), 'default', array('class' => 'alert alert-danger')); } } } 

Faz um tempo que a pergunta foi respondida, mas espero que isso possa ajudar aqueles que vieram atrás de mim.

Eu escrevi um breve passo a passo sobre como configurar a funcionalidade ‘lembrar-me’ usando o plugin de autenticação de Ceeram

Mais informações aqui: http://mirkoborivojevic.com/posts/2013/08/10/setup-remember-me-functionality-in-cakephp/