Intereting Posts
Уведомление в корзине Woocommerce, показывающее несколько раз Распаковка нагрузки в соответствии со значением другого раскрывающегося списка – без обновления страницы в PHP php password_verify не работает с базой данных PHPUnit – создание объектов Mock для работы в качестве заглушек для свойств Вопросительный знак PHP Как настроить кеш реального пути PHP? PHP MySQL Query Где x = $ variable Получение ошибки мыла SOAP-ERROR: анализ WSDL: не удалось загрузить … не удалось загрузить внешний объект Как установить значение multi select из объекта массива в yii2 при обновлении Как заставить PHP генерировать Chunked-ответ CakePHP 2.0 – Как создать пользовательские страницы ошибок? Ошибка Symfony 500 с app.php, отлично работает на app_dev.php PHP DOMDocument, поиск определенных элементов codeigniter: почему это происходит, когда i echo base_url () в атрибуте href тега привязки, он повторяет два раза WAMP Загрузка большого файла

Cakephp 3.0 Login возвращает false каждый раз

Я пытаюсь войти в систему на моем сайте Cakephp 3.0. В моей таблице есть поле «имя пользователя» и «пароль» с именем «есть». Я могу добавить пользователя, и мой пароль успешно получает хэширование и хранится в моей таблице. Несмотря на это, я не могу войти в систему даже однажды.

Мой метод Initialize () AppController:

$this->loadComponent('Auth',['loginAction' => [ 'controller' => 'ShopOwners', 'action' => 'login' ],'authenticate' => [ 'Form' => [ 'fields' => [ 'username' => 'username', 'password' => 'password', ], 'userModel' => 'ShopOwners' ] ],'loginRedirect' => [ 'controller' => 'ShopOwners', 'action' => 'view' ], ]); $this->Auth->allow(['home','add']); 

Моя функция просмотра в моем контроллере

 public function login(){ $this->log('Inside login','debug'); if($this->request->is('post')){ $this->log('Inside login is post','debug'); $shopOwner = $this->Auth->identify(); if($shopOwner){ $this->log('Inside is owner','debug'); $this->Auth->setUser($shopOwner); return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error(__('Invalid username or password, try again')); } } 

И, наконец, мой файл входа в систему login.ctp

 <h1>Login</h1> <?= $this->Form->create(); ?> <?= $this->Form->input('username'); ?> <?= $this->Form->input('password'); ?> <?= $this->Form->button(__('Login')); ?> <?= $this->Form->end(); ?> 

Я попробовал множество решений, предлагаемых на сайте и в других местах, чтобы исправить это. К ним относятся:

  1. защищенный $ _accessible установлен правильно
  2. Проверено, что имена столбцов таблицы – это имя пользователя и пароль точно
  3. SQL-запрос возвращает 1 строку, проверенную через консоль, но Auth-> ident () ничего не возвращает.
  4. Сделал много новых пользователей, если я ввел неверный пароль, ничего не удавалось
  5. Проверял имена файлов / таблиц / столбцов, чтобы все совпадало [по крайней мере, я думаю, что все в порядке)
  6. Также проверяется, если пользователь уже зарегистрировался с помощью $ this-> Auth-> user ('username'), который ничего не вернул

Новое для CakePHP, и застряли в этом на целый день. Очень ценю любую помощь.

EDIT: Может кто-то хотя бы сказать мне, почему ident () ничего не возвращает. Я сделал след в моей функции входа в контроллер, и он вернулся

 App\Controller\ShopOwnersController::login() - APP/Controller\ShopOwnersController.php, line 132 Cake\Controller\Controller::invokeAction() - CORE\src\Controller\Controller.php, line 405 Cake\Routing\Dispatcher::_invoke() - CORE\src\Routing\Dispatcher.php, line 114 Cake\Routing\Dispatcher::dispatch() - CORE\src\Routing\Dispatcher.php, line 87 [main] - ROOT\webroot\index.php, line 37 

Заканчивается:

 Undefined variable: _SESSION [CORE\src\Network\Session.php, line 436] 

Почему он останавливается на index.php? Что может быть неправильным? В индексе, который я проверил

 print_r(Request::createFromGlobals()); 

В котором я вижу, что мой массив данных содержит имя пользователя и пароль, но все равно ничего. Пароль – это текст, а не хешированный, это проблема ??

РЕДАКТИРОВАТЬ 2: Мой объект запроса содержит следующее

 [params] => Array ( [plugin] => [controller] => [action] => [_ext] => [pass] => Array ( ) ) [data] => Array ( [username] => user9 [password] => user9 ) [query] => Array ( ) 

Почему мой запрос Array пуст? Это должно быть ??

EDIT 3 – я попытался отправить хешированную версию своего пароля и сбросить запрос-> данные ['password'] в хешированную версию. Это не сработало, потому что

  1. Хэшированные версии для одного и того же слова были разными каждый раз. Я использовал (новый DefaultPasswordHasher) -> hash () для этого
  2. Я попытался скопировать хешированную версию пароля из базы данных непосредственно в мою регистрационную форму. Не повезло

Если вы не используете таблицу под названием «Пользователи» для хранения имени пользователя и пароля, вы должны сообщить об этом CakePHP, как описано в этом разделе руководства:

http://book.cakephp.org/3.0/en/controllers/components/authentication.html#configuring-authentication-handlers

В основном вам нужно добавить это в свою конфигурацию AuthComponent:

 $this->loadComponent('Auth',['loginAction' => [ 'controller' => 'ShopOwners', 'action' => 'login' ],'authenticate' => [ 'Form' => [ 'userModel' => 'ShopOwners', // Added This 'fields' => [ 'username' => 'username', 'password' => 'password', ] ] ],'loginRedirect' => [ 'controller' => 'ShopOwners', 'action' => 'view' ], ]); 

Важно помнить, что хэши паролей обычно очень длинные, поэтому убедитесь, что ваш столбец пароля в базе данных достаточно велик (я использую 255 на всякий случай)