Не удается войти в систему для работы с CakePHP 2.0 - PullRequest
7 голосов
/ 06 ноября 2011

Я пытаюсь заставить работать простую форму входа в систему, используя CakePHP 2.0 ... просто Auth, пока нет ACL.

Я могу просмотреть форму и ввести адрес электронной почты и пароль в том виде, в каком они есть в базе данных, но я просто возвращаюсь к форме и отображается сообщение об ошибке флэш-памяти. Вот мой код:

AppController:

 class AppController extends Controller
 {
     function beforeFilter()
     {
         $this->Auth->userModel = 'Users';
         $this->Auth->fields = array('username' => 'email', 'password' => 'password'); //have to put both, even if we're just changing one
         $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
         $this->Auth->loginRedirect = array('controller' => 'hotels', 'action' => 'dashboard');
         $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
     }
 }

login.ctp:

<?php
         echo $this->Form->create('User', array('action' => 'login'));
         echo $this->Form->input('email');
         echo $this->Form->input('password');
         echo $this->Form->end('Login');
     ?>

UsersController:

 class UsersController extends AppController
 {
     var $name = 'Users';
     var $helpers = array('Html','Form');
     var $components = array('Auth','Session');

     function beforeFilter()
     {
         $this->Auth->allow("logout");
         parent::beforeFilter();
     }

     function index() { } //Redirects to login()

     function login()
     {
         if ($this->Auth->login())
         {
             $this->redirect($this->Auth->redirect());
         } else
         {
             $this->Session->setFlash(__('Invalid username or password, try again'));
         }
     }

     function logout()
     {
         $this->redirect($this->Auth->logout());
     }
 }
 ?>

Я ценю любую помощь с этим. Спасибо!

Ответы [ 7 ]

9 голосов
/ 06 ноября 2011

Ошибка "Неверное имя пользователя или пароль, попробуйте еще раз" Ошибка отображается после входа в систему?

Есть несколько вещей, которые вы должны проверить:

• Естьвывод $this->Auth->login() идентичен информации в вашей базе данных?Поставьте debug($this->Auth->login()), чтобы увидеть результат в вашем методе входа после отправки формы.

• Правильно ли хешированы пароли в базе данных?

• Попробуйте сделать AuthComponent доступным для всехваши контроллеры не только UsersController.

• Не уверен, что это имеет значение, но вызовите parent::beforeFilter();, прежде чем что-либо еще в методе beforeFilter вашего контроллера.

EDIT:

Видно, что вы пытаетесь проверить на основе электронной почты и пароля.По умолчанию AuthComponent ожидает имя пользователя и пароль.Вы должны явно указать, что вы хотите, чтобы адрес электронной почты и пароль были подтверждены $this->Auth->login().Это вытекает из документации 2.0:

public $components = array(
    'Auth'=> array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        )
    )
);

Я полагаю, что тот факт, что вы не видите никакого вывода SQL, следует ожидать.

6 голосов
/ 22 апреля 2014

Также вы должны проверить, установлено ли для вашего поля «пароль» в базе данных значение VARCHAR 50.

Мне случается, что я усекаю хешированный пароль в БД, и аутентификации никогда не происходит.

2 голосов
/ 26 марта 2013

если вы не используете defalut "username", "password" для аутентификации, вы не можете получить логин например, вы используете "электронная почта"

Вы должны отредактировать объявление компонента в вашем контроллере, содержащее вашу функцию входа в систему:

$component = array('Auth' => array(
  'authenticate' => array(
    'Form' => array(
      'fields' => array('username' => 'email', 'password' => 'mot_de_passe')
    )
  )
));
1 голос
/ 04 марта 2013

Будьте осторожны с соглашениями CakePHP.Вы должны изменить это "$ this-> Auth-> userModel = 'Users';"на "$ this-> Auth-> userModel = ' User ';"потому что пользователь без множественного числа является условием модели в торт.Это сработало для меня, а также с большой буквы.это почти сводило меня с ума.Удачи.

0 голосов
/ 01 декабря 2015

Редактирование объявления компонента в AppController помогло мне. Если у вас есть поля с именами, отличными от «username» и «password», вы всегда должны указывать их. В вашем случае это будет

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'passwordHasher' => 'Blowfish',
                'fields' => array('username' => 'email','password' => 'password')
            )
        )
    )
);
0 голосов
/ 07 декабря 2014

В уроке cakephp есть ошибка. $ this-> Auth-> login () должен быть изменен на $ This-> Auth-> Логин ($ this-> request-> данные)

0 голосов
/ 14 апреля 2014
public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect' => array(
            'controller' => 'Events',
            'action' => 'index'
        ),
        'logoutRedirect' => array(
            'controller' => 'Users',
            'action' => 'login',
            'home'
        ),
        'authenticate' => array(
        'Form' => array(
            'fields' => array('username' => 'username','password' => 'password')
        )
    )
    )
);
...