2016-01-31 5 views
1

Я не знаю, почему я все еще получаю недопустимое имя пользователя или пароль, пока у меня есть все коды и моя база данных. Также пользователь уже зарегистрирован, но не может войти в систему.Неверный пароль или имя пользователя в форме входа в систему cakephp

AppController.php

class AppController extends Controller{ 

    public $components = array(
     /*'DebugKit.Toolbar',*/ 
     'Session', 
     'Auth' => array(
      'loginRedirect' => array('controller' => 'jobs', 'action' => 'index'), 
      'logoutRedirect' => array(
       'controller' => 'users', 
       'action' => 'login' 
      ) 
     ) 
    ); 
} 

Модель: User.php

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

class User extends AppModel { 

    public $validate = array(
     'Username' => array(
      'notEmpty' => array(
       'rule' => array('notEmpty'), 
      ), 
      'The username already exists'=>array(
       'rule'=>array('isUnique'), 
       'message'=>'The username already exists!' 
      ), 
     ), 
     'Password' => array(
      'notEmpty' => array(
       'rule' => array('notEmpty'), 
      ), 
      'Match passwords'=>array(
       'rule'=>'matchPasswords', 
       'message'=>'The password does not match' 
      ), 
     ), 
     'Confirm_Password' => array(
      'notEmpty' => array(
       'rule' => array('notEmpty'), 
      ), 
     ), 
    ); 


    function matchPasswords($data){ 

     if ($data['Password'] == $this->data['User']['Confirm_Password']) { 

      return TRUE; 
     } 
     $this->invalidate('Confirm_Password', 'The password does not match'); 
     return FALSE; 
    } 

    public function beforeSave($options = array()) { 
     if (!parent::beforeSave($options)) { 
      return false; 
     } 
     if (isset($this->data[$this->alias]['Password'])) { 
      $hasher = new SimplePasswordHasher(); 
      $this->data[$this->alias]['Password'] = $hasher->hash($this->data[$this->alias]['Password']); 
     } 
     return true; 
    } 
} 

Контроллер: UsersController.php

class UsersController extends AppController { 

    public $components = array('Session');  

    var $name = 'Users'; 
    var $helpers = array('Form'); 

    // Placeholder for login_form, required by CakePHP to see the login_form view 
    function login_form() { } 

    public function beforeFilter() { 
     parent::beforeFilter(); 
     $this->Auth->allow('user', 'login'); 
    } 

    public function login(){ 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       return $this->redirect($this->Auth->redirectUrl()); 
      } 
      $this->Session->setFlash(__('Incorrect username or password')); 
     } 
    } 

    public function logout() { 

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

    public function done() { 

     $this->set('framework', 'CakePHP'); 

    } 

    public function user(){ 

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

      $this->User->create(); 

      if($this->User->save($this->request->data)) { 
       $this->Session->setFlash('The information has been sent successfully!'); 
       return $this->redirect(array('action' => 'login')); 

       $this->redirect('done'); 
      } 
     } 
    } 
} 

Вид: login.ctp

<h4>LOGIN HERE</h4> 
    <?php 
    echo $this->Session->flash('auth'); 
    echo $this->Form->create('User'); 
    echo $this->Form->input('Username'); 
    echo $this->Form->input('Password',array('type' => 'password')); 
    echo $this->Form->end('Login'); 

    ?> 

ответ

1

Вы не используете имена полей по умолчанию, которые ожидает CakePHP. Поэтому вы должны включить их в свою конфигурацию AuthComponent.

Попробуйте следующее:

class AppController extends Controller 
{ 
    public $components = array(
     /*'DebugKit.Toolbar',*/ 
     'Session', 
     'Auth' => array(
      'loginRedirect' => array('controller' => 'jobs', 'action' => 'index'), 
      'logoutRedirect' => array(
       'controller' => 'users', 
       'action' => 'login' 
      ), 
      'authenticate' => array(
       'Form' => array(
        'fields' => array(
         'username' => 'Username', 
         'password'=>'Password' 
        ), 
       ), 
      ) 
     ) 
    ); 
} 

Они должны совпадать имена полей в вашем users столе и в своих взглядах.

EDIT

Кроме того, убедитесь, что поле пароля в базе данных достаточно долго, чтобы хранить хэш пароля. Алгоритмом по умолчанию, используемым CakePHP, является SHA1, который генерирует хэш в 160 бит (40 символов). A VARCHAR 255 должно быть более чем достаточно для хранения этой строки.

См:

+0

Он по-прежнему говорит неправильное имя пользователя или пароль ..! –

+0

Пожалуйста, напишите инструкцию 'CREATE' таблицы' users'. –

+0

Я создал свою таблицу на phpmyadmin, поэтому я не использовал никакой инструкции таблицы. –