Войти всегда false на CakePHP 3

Я начал использовать CakePHP 3 через некоторое время, используя CakePHP 2, и у меня возникли проблемы с созданием входа для аутентификации.

Новая функция auth $this->Auth->identify() всегда возвращает false.

В базе данных пароль зашифрован отлично, и запрос, который берет пользователя, тоже в порядке.

Мой код:

AppController:

 [...] class AppController extends Controller{ public function initialize(){ $this->loadComponent('Flash'); $this->loadComponent('Auth', [ 'loginRedirect' => [ 'controller' => 'Admin', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Pages', 'action' => 'display' ] ]); } public function beforeFilter(Event $event) { $this->Auth->allow(['display']); } } 

UserController:

 [...] class UsersController extends AppController{ public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow(['logout']); } [...] public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error(__('Invalid username or password, try again')); } } [...] из [...] class UsersController extends AppController{ public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow(['logout']); } [...] public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error(__('Invalid username or password, try again')); } } [...] 

Пользователь (модель):

 <?php namespace App\Model\Entity; use Cake\Auth\DefaultPasswordHasher; use Cake\ORM\Entity; class User extends Entity{ protected $_accessible = [*]; protected function _setPassword($password){ return (new DefaultPasswordHasher)->hash($password); } } 

Посмотреть:

 <div class="users form"> <?= $this->Flash->render('auth') ?> <?= $this->Form->create() ?> <fieldset> <legend><?= __('Please enter your username and password') ?></legend> <?= $this->Form->input('username') ?> <?= $this->Form->input('password') ?> </fieldset> <?= $this->Form->button(__('Login')); ?> <?= $this->Form->end() ?> </div> 

CakePHP3 использует другой алгоритм хэширования по умолчанию, чем 2 (bcrypt против SHA1), поэтому вам нужно увеличить длину пароля. Измените свое поле пароля на VARCHAR (255), чтобы быть в безопасности.

Когда CakePHP 3 пытается идентифицировать ваш хешированный пароль в памяти из этого-> Auth-> ident () по сравнению с хешированным паролем в базе данных, он никогда не будет соответствовать, потому что некоторые символы отсутствуют. Переход на 255 больше, чем необходимо, но может помочь в будущем, если в будущем будет использоваться еще более безопасный хеш. 255 рекомендуется, так как количество символов может храниться в одном байте.

Решено: тип базы данных был меньше, чем требуется. Изменен на varchar (255) и теперь отлично работает 🙂

Я была такая же проблема. Login [Auth-> ident ()] не работал для меня. Изменение длины пароля в db решит проблему.

Приветствую мои фрагменты для входа в Auth, все тестирование в порядке, в CakePHP 3.1, таможня (таблица + просмотр входа в систему BootStrap 3 + база SQL + пользовательский bootstrap.php для испанского в Inflector :: rules (*******))

Весь код в

https://bitbucket.org/snippets/eom/rLo49