Я объясню свою проблему:
У меня есть базовый модуль, который позволяет регистрировать пользователей и входить в систему. Все идет нормально. Моя проблема возникает на этапе входа в систему, поскольку я использую собственный хэш типа $password+$key. Ключ $key автоматически генерируется во время регистрации, а затем сохраняется в таблице пользователей вместе с другой информацией.
Я хотел бы знать, есть ли способ получить это значение без использования ручных проверок, чтобы мой код был абсолютно чистым и функциональным.
В настоящее время я могу ввести любой пароль, и $user возвращает true, пока адрес электронной почты существует в таблице.
src/Controller/Users/Usercontroller.php
Код: Выделить всё
public function register() {
$userTable = TableRegistry::getTableLocator()->get('Users');
$user = $this->Users->newEntity($this->request->getData(), ['validate' => 'UserStep1']);
$user->type = $this->request->getSession()->read('account-type');
$user->salt = sha1(md5($this->request->getSession()->read('salt')));
$user->password = $hash->hash($this->request->getData('password'),$this->request->getSession()->read('salt'));
if ($userTable->save($user)) {
return true;
}
}
public function login() {
if($this->request->is('post')) {
$user = $this->Auth->identify();
if($user) {
$this->Auth->setUser($user);
$this->redirect($this->redirect($this->Auth->redirectUrl()));
$this->Flash->response('Connecté', [
'key' => 'response',
'params' => [
'status' => 'success'
]
]);
} else {
$this->Flash->response('Identifiant ou mot de passe incorrect', [
'key' => 'response',
'params' => [
'status' => 'error'
]
]);
}
}
}
Код: Выделить всё
namespace App\auth;
use Cake\Auth\AbstractPasswordHasher;
class CustomPasswordHasher extends AbstractPasswordHasher {
public function hash($password, $securestring = null) {
$encode= sha1(md5('stringmasked'). md5(sha1($password)).sha1(sha1(md5($securestring))));
return $encode;
}
public function check($password, $salt)
{
$encode = sha1(md5('stringmasked').md5(sha1($password)).sha1(($salt)));
return $encode;
}
}
Код: Выделить всё
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => ['username' => 'email'],
'passwordHasher' => ['className' => 'Custom']
]
]
]);
$this->Auth->allow();
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/797 ... akephp-3-8
Мобильная версия