Я пытаюсь войти в систему на моем сайте Cakephp 3.0. В моей таблице есть поля «имя пользователя» и «пароль», названные как есть. Я могу добавить пользователя, и мой пароль успешно хешируется и сохраняется в моей таблице. Несмотря на это, я не могу войти ни разу.
Мой метод инициализации 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(); ?>
Я пробовал множество решений, предлагаемых на сайте и в других местах, чтобы попытаться исправить это. К ним относятся:
- защищенный $_accessible установлен правильно
- Проверено, что имена столбцов таблицы точно совпадают с именем пользователя и паролем.
- SQL-запрос возвращает 1 строку, проверенную через консоль, но Auth->identify() ничего не возвращает.
- Сделано много новых пользователей на случай, если я ввел неправильный пароль, не повезло, ничего не очистилось
- Проверил имена моих файлов/таблиц/столбцов, чтобы все совпало [по крайней мере, я думаю, что все в порядке]
- Также проверяется, не вошел ли пользователь в систему, используя $this->Auth->user('username'), который ничего не вернул
Новичок в Cakephp и застрял на этом уже целый день. Очень ценю любую помощь.
РЕДАКТИРОВАТЬ: Может ли кто-нибудь хотя бы сказать мне, почему идентификация () ничего не возвращает. Я сделал трассировку в моей функции входа в контроллер, и она вернулась
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 ( )
Почему мой массив запросов пуст? Это должно быть??
РЕДАКТИРОВАТЬ 3. Я попытался отправить хешированную версию своего пароля и сбросить запрос-> данные ['пароль'] на хешированную версию. Это не сработало, потому что
- Хэшированные версии одного и того же слова каждый раз были разными. Я использовал (новый DefaultPasswordHasher)->hash() для этого
- Я попытался скопировать хешированную версию пароля из базы данных прямо в форму входа. Не повезло