2013-12-24 2 views
0

Я пытаюсь реализовать помню мне функциональность в cakephp. Во-первых, когда пользователь нажимает на доменную страницу входа в систему, должен появиться, если пользователь нажмет кнопку «Запомнить меня» во время входа в систему, когда следующий раз пользователь попадет в домен он должен перенаправить на другую страницу, а не на страницу входа, если помнить, что меня не проверяет, тогда должна появиться страница входа в систему.Запомнить меня с cakephp Auth Войти

Здесь запомнить меня работает, но если пользователь вошел в систему в необходимости отобразить страницу домашний каталог не Войти страница

, как я могу это реализовать.

Спасибо за помощь ...

Вот мой код я работаю над:

routes.php:

Router::connect('/', array('controller' => 'users', 'action'=>'login')); 
Router::connect('/:action', 
array('controller' => 'users', 'action' => 'userhome'), 
array('pass' => array(''))); 

AppController.php

public $components = array(
'Session','Auth' => array('loginRedirect' => 
array('controller' => 'users', 'action' => 'userhome'), 
'logoutRedirect' => '/','authorize'=>array('Controller'),),'Cookie'); 


public function beforeFilter() { 
$this->Cookie->httpOnly = true; 
if (!$this->Auth->loggedIn() && $this->Cookie->read('rememberMe')) { 
     $cookie = $this->Cookie->read('rememberMe'); 
     echo debug($cookie); 
     $this->loadModel('User'); // If the User model is not loaded already 
     $user = $this->User->find('first', array(
       'conditions' => array(
         'User.username' => $cookie['username'], 
         'User.password' => $cookie['password'] 
       ) 
     )); 

public function login() { 
if($this->request->is('post')){ 

if ($this->Auth->login()) { 

    if ($this->request->data['User']['rememberMe'] == 1) { 
         // After what time frame should the cookie expire 
    $cookieTime = "12 months"; // You can do e.g: 1 week, 17 weeks, 14 days 

    // remove "remember me checkbox" 
    unset($this->request->data['User']['rememberMe']); 

    // hash the user's password 
    $this->request->data['User']['password'] = $this->Auth->password($this->request->data['User']['password']); 

// write the cookie 
    $this->Cookie->write('rememberMe', $this->request->data['User'], true, $cookieTime); 
} 



$this->redirect($this->Auth->redirect()); 


} 


} 




} 

     if ($user && !$this->Auth->login($user['User'])) { 
      $this->redirect('/users/logout'); // destroy session & cookie 
     } 
    } 

View :

<?php echo $this->Form->input('rememberMe', array('type' => 'checkbox', 
'label' => 'Remember me','class'=>'rememberme')); ?> 

ответ

2

Я не очень понимаю вашу вложенную function login(), но я предполагаю, что это просто образец из вашего /users/login действия, поэтому позвольте мне переписать метод beforeFilter для перенаправления пользователя на /users/userhome, если он попадает на домен и регистрируется при помощи куки :

public function beforeFilter() { 
    $this->Cookie->httpOnly = true; 
    if (!$this->Auth->loggedIn() && $this->Cookie->read('rememberMe')) { 
      $cookie = $this->Cookie->read('rememberMe'); 
      debug($cookie); // no need to echo it, debug function does that already 
      $this->loadModel('User'); // If the User model is not loaded already 
      $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 
     } else { 
      $this->redirect($this->Auth->redirectUrl()); // redirect to Auth.redirect if it is set, else to Auth.loginRedirect ('/users/userhome') if it is set, else to/
     } 
    } 
} 

FYI: $this->Auth->redirect() нежелателен 2,3, используйте $this->Auth->redirectUrl() вместо

+0

спасибо за ответ ... – user1851420

+0

Здесь я столкнулся еще problem.when я закрыть мой браузер печенье становится уничтожены, событие, если я проверяю память ber me во время входа в систему. В моем файле php.ini cookieifetime установлено значение 0. – user1851420

+0

Вы уверены, что не уничтожаете файл cookie в своем AppController в методе afterFilter или какой-либо оставшийся тестовый код? В противном случае попробуйте найти похожие вопросы. Например [этот] (http://stackoverflow.com/questions/12301425/cakephp-cookies-not-persisting-after-browser-close), может быть? – lp1051

Смежные вопросы