Я пытаюсь войти в систему на моем сайте 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(); ?>
Я попробовал множество решений, предлагаемых на сайте и в других местах, чтобы исправить это. К ним относятся:
Новое для 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'] в хешированную версию. Это не сработало, потому что
Если вы не используете таблицу под названием «Пользователи» для хранения имени пользователя и пароля, вы должны сообщить об этом CakePHP, как описано в этом разделе руководства:
В основном вам нужно добавить это в свою конфигурацию 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 на всякий случай)