2014-03-07 6 views
2

Я работаю над простым приложением для входа с тортом 2.4 для моей мамы. вот код для модели пользователя.CakePHP 2.4 Auth-> login() always return TRUE

App::uses('SimplePasswordHasher', 'Controller/Component/Auth'); 

class User extends AppModel{ 
     public $validate = array(
       'username' => array(
         'required' => array(
           'rule' => array('notEmpty'), 
           'message' => 'A username is required' 
         ) 
       ), 
       'password' => array(
         'required' => array(
           'rule' => array('notEmpty'), 
           'message' => 'A password is required' 
         ) 
       ) 
     ); 

     public function beforeSave($options = array()) { 
       if(isset($this->data[$this->alias]['password'])) { 
         $passwordHasher = new SimplePasswordHasher(); 
         $this->data[$this->alias]['password'] = $passwordHasher->hash(
         $this->data[$this->alias]['password'] 
         ); 
       } 
       return true; 
     } 
} 

Мой UsersController код ...

class UsersController extends AppController{ 
     public $helpers = array('Html','Form'); 

     public function beforeFilter(){ 
       parent::beforeFilter(); 
       $this->Auth->allow('add'); 
     } 
     public function add(){ 
       if($this->request->is('post')){ 
         $this->User->create(); 
         if($this->User->save($this->request->data)){ 
           $this->Session->setFlash(__('The user has been saved')); 
           return $this->redirect(array('action' => 'index')); 
         } 
         $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 
       } 
     } 
     public function login(){ 
       $this->layout = 'mlayout'; 
       if($this->request->is('post')){ 
         debug($this->Auth->login()); 
         var_dump($this->request->data); 
         if($this->Auth->login()){ 
           $this->Session->setFlash('Logged In'); 
           //return $this->redirect($this->Auth->redirectUrl()); 
         }else{ 
           $this->Session->setFlash(__('Usuario o Contraseña invalido, intentelo de nuevo.')); 
         } 
       } 
     } 
     public function logout(){ 
       return $this->redirect($this->Auth->logout()); 
     } 
} 

AppController код:

class AppController extends Controller{ 

     public $components = array('Session', 
       'Auth' => array(
         'loginRedirect' => array(
           'controller' => 'homes', 
           'action' => 'index' 
         ), 
         'logoutRedirect' => array(
           'controller' => 'homes', 
           'action' => 'index' 
         ) 
       ) 
     ); 

     public function beforeFilter(){ 
       $this->Auth->allow('index','view','login'); 
     } 
} 

Login.ctp

   <table id="formtable"> 
       <form id="UserForm" method="post" action="/mercadito/users/login"> 
       <tr> 
         <td align="right">Login -> </td> 
         <td><input type="text" name="username" style="width: 150px; height: 30px;"/></td> 
       </tr> 
       <tr> 
         <td align="right">Contraseña -> </td> 
         <td><input type="password" name="password" style="width: 150px; height: 30px;"/></td> 
       </tr> 
       <tr> 
         <td></td> 
         <td align="center"><input type="submit" value="ENTRAR" style="width: 100px; height: 30px;"/></td> 
       </tr> 
       </form> 
       </table> 

отладки ($ this-> Auth-> login()) возвращает: /app/Contro Мюллер/UsersController.php (строка 23) правда

var_dump() возвращает: массива (2) {[ "имя пользователя"] => строка (9) "ddfdsffsd" [ "пароль"] => строки (9) "fdsfdssfd"}

Это происходит каждый раз, независимо от ввода в форме входа.

+0

Попробуйте ввести массив 'Auth':' 'authenticate' => array ('Form') ' – Eagle

ответ

1

Вам нужно настроить обработчик авторизации использовать beforeFilter в контроллере см: Configuring Authorization handlers

Добавить 'санкционировать' => 'Controller' к вашему AppController:

class AppController extends Controller{ 

    public $components = array('Session', 
      'Auth' => array(
        'loginRedirect' => array(
          'controller' => 'homes', 
          'action' => 'index' 
        ), 
        'logoutRedirect' => array(
          'controller' => 'homes', 
          'action' => 'index' 
        ), 
        'authorize' => 'Controller' 
      ) 
    ); 

    public function beforeFilter(){ 
      $this->Auth->allow('index','view','login'); 
    } 

}

+0

Спасибо! Но теперь он всегда возвращает FALSE. :( – user3394540

+0

Вам, вероятно, потребуется переместить разрешенную «регистрационную» часть в UserController. Поскольку вы выполняете запрос, который маршрутизируется в UserController, он будет использовать файл beforeFilter этого контроллера, чтобы проверить, разрешено ли пользователям получать доступ к этому конкретному действию. –

+0

Я изменил местоположение «allow -> (« login »), затем я проверил, был ли мой пароль хорошо хэширован, и это было. Но проблема не устранена. – user3394540