2011-07-12 15 views
0

ログイン後にCookieを書き込もうとしていますが、何も保存していないようです。Cakephp Cookieの問題

何か間違っていますか?ログイン機能を実行するための

function login() { 

    if ($this->Session->read('Auth.User')) { 
     if($this->data['User']['remember']){ 
     $cookie = array(); 
     $cookie['username'] = $this->data['User']['email']; 
     $cookie['password'] = $this->data['User']['password']; 
     $this->Cookie->write('Auth.User', $cookie, true, '+2 weeks'); 
     unset($this->data['User']['remember']); 
     } 
     $this->Session->setFlash('You are logged in!'); 
     $this->redirect(array('action' => 'logs')); 
    } else { 

    $this->Session->setFlash('Invalid username and password combination'); 
    $this->redirect('/', null, false); 

    } 

}  

答えて

1

、あなたはの$ this - を設定する必要があります>(のAppControllerやUserControllerにある状態)のbeforeFilter文の中に偽Auth-> autoRedirect =

これは完全なログイン機能でもログアウト機能:

function beforeFilter(){ 
    parent::beforeFilter(); 
    $this->Auth->autoRedirect = false; 
} 

function login(){ 
    // Check if user is already logged in 
    if($this->Auth->user()){ 
     // Check remember me checkbox 
     if(!empty($this->data) && $this->data['User']['remember']){ 
      // write the cookie 
      $this->Cookie->write('Auth.User', $this->Auth->user('id'), true, '+2 weeks'); 
      unset($this->data['User']['remember']); 

     }else{ 
      // if the user is already logged in redirect him with a message 
      $this->Session->setFlash('You are logged in!'); 
     } 

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

    // Login user from cookie 
    if(empty($this->data)){ 
     $user_id = $this->Cookie->read('Auth.User'); 
     if (!is_null($user_id)) { 
      $user = $this->User->read($user_id); 
      if($this->Auth->login($user)){ 
       // clear auth message 
       $this->Session->delete('Message.auth'); 
       $this->redirect($this->Auth->redirect()); 
      }else{ 
       //delete invalid cookie 
       $this->Cookie->delete('Auth.User'); 
      } 
     } 
    } 
} 

function logout(){ 
    $this->Cookie->delete('Auth.User'); 
    $this->redirect($this->Auth->logout()); 
} 
+1

別のこととして、機密データ(ユーザー名とパスワードなど)をクッキーに保存しないでください。セキュリティ上の問題を避けるため、ユーザーIDまたはUUIDのみを格納します。 – Mihai

+0

ありがとうMihai。これは、現在のコントローラで何かを見つけることができない場合、常にAppControllerをチェックするように私に思い出させます! –

+0

よろしくお願いします – Mihai