Я изучаю прямо сейчас CakePHP, и я следил за каждым направлением, которое они мне дали, и я получил замечательные результаты, но когда дело доходит до компонента Auth (и очень простая аутентификация, которую они обучают на сайте), я просто не могу управлять сделать это.
Метод $ this-> Auth-> login () продолжает возвращать false и не позволяет мне войти в систему.
Я не использую ничего больше, чем показывает урок, я даже не могу хэшировать пароли (успокойся, я буду, но мне нужно получить базовые данные до!).
Вот мой код:
Модель
App::uses('AppModel', 'Model'); class User extends AppModel { public $validate = array( 'username' => array( 'notEmpty' => array( 'rule' => array('notEmpty'), 'required' => true ), ), 'password' => array( 'notEmpty' => array( 'rule' => array('notEmpty'), 'required' => true ), ), );
AppController
App::uses('Controller', 'Controller'); class AppController extends Controller { public $components = array( 'Session', 'Auth' => array( 'loginRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'), 'logoutRedirect' => array('controller' => 'Users', 'action' => 'index') ) ); }
Контроллер пользователей
App::uses('AppController', 'Controller'); class UsersController extends AppController { public function login() { if($this->request->is('post')) { if(!$this->Auth->login()) { $this->Session->setFlash('Invalid Username or Password'); } else { $this->redirect($this->Auth->redirectUrl()); } } } public function logout() { $this->redirect($this->Auth->logout()); }
изApp::uses('AppController', 'Controller'); class UsersController extends AppController { public function login() { if($this->request->is('post')) { if(!$this->Auth->login()) { $this->Session->setFlash('Invalid Username or Password'); } else { $this->redirect($this->Auth->redirectUrl()); } } } public function logout() { $this->redirect($this->Auth->logout()); }
Просмотр (Пользователи / login.ctp)
<div class="login-box"> <?php echo $this->Session->flash('auth'); ?> <?php echo $this->Form->create(); echo $this->Form->input('username'); echo $this->Form->input('password'); echo $this->Form->end('login'); ?> </div>
Перед сохранением в базе данных вам нужно будет хэш-пароль. При аутентификации с использованием AuthComponent :: login () пароль, введенный в вашу регистрационную форму, сначала хэшируется, а затем проверяется с записью в базе данных. Поскольку ваша запись в базе данных не хеширована, проверка возвращает false.
Хешируйте пароль в User :: beforeSave (), как указано здесь в книге .