Я использую CakePHP 3.5. Я пытаюсь создать простой логин, но у меня проблемы:
UserController.php
public function login(){
if ($this->request->is('post')){
// $data = $this->request->getData();
//pr($data);
$user = $this->Auth->identify();
if ($user){
$this->Flash->success('Successful login');
$this->Auth->setUser($user);
return $this->redirect(['action' => 'index']);
}else{
$this->Flash->error(__('Please, try again.'));
}
}
}
<?php
namespace App\Model\Entity;
use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;
/**
* UsersTable Entity
*
* @property int $id
* @property string $username
* @property string $email
* @property string $password
*/
class UsersTable extends Entity
{
/**
* Fields that can be mass assigned using newEntity() or patchEntity().
*
* Note that when '*' is set to true, this allows all unspecified fields to
* be mass assigned. For security purposes, it is advised to set '*' to false
* (or remove it), and explicitly make individual fields accessible as needed.
*
* @var array
*/
protected $_accessible = [
'username' => true,
'email' => true,
'password' => true
];
/**
* Fields that are excluded from JSON versions of the entity.
*
* @var array
*/
protected $_hidden = [
'password'
];
protected function _setPassword($password){
return(new DefaultPasswordHasher)->hash($password);
}
}
login.ctp
<?= $this->Form->create();?>
<?= $this->Form->control('email'); ?>
<?= $this->Form->control('password'); ?>
<?= $this->Form->button('login');?>
<?= $this->Form->end(); ?>
AppController.php
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler', [
'enableBeforeRedirect' => false,
]);
$this->loadComponent('Flash');
$this->loadComponent('Auth',[
'authenticate' =>[
'Form' => [
'fields' => [
'username' =>'email',
'password' =>'password'
]
]
],
'loginAction' => [
'controller' =>'UsersTable',
'action' =>'login'
]
]);
да, все пользователи были добавлены в базу данных, и в них не было внесено никаких изменений, за исключением: 1. user1 был создан без хэширования пароля, затем 2. хеширование пароля было использовано для других пользователей






https://book.cakephp.org/3.0/en/controllers/components/authentication.html
Функция _setPassword работает только тогда, когда вы добавляете или редактируете объект в своей таблице.
Поскольку вы добавили user1 перед добавлением _setPassword в User Entity, почему он не был хеширован.
Также он не хеширует user1, когда вы входите в систему, так как ничего не меняется в User Entity в таблице.
Если вы хотите хешировать user1, просто отредактируйте его в панели администратора.
Я полностью осведомлен о том, что вы предложили. Но основная проблема заключается в том, что система не позволяет мне входить в систему с хешированием пароля или без него ... Более того, я попытался создать несколько пользователей, отключив хеширование, но он все еще сохраняет хеширование пароля для новых пользователей ... Я серьезно не понимаю, почему это происходит .... Есть предложения ???
Создан ли пользовательский номер в базе данных? Редактировалось ли оно с момента создания?