Cakephp не хеширует пароль при входе в систему, а только при регистрации

Я использую CakePHP 3.5. Я пытаюсь создать простой логин, но у меня проблемы:

  1. Я могу войти в систему с паролем, который не был хеширован
  2. Мой хешер паролей по умолчанию работает ... пароль фактически хешируется, но при входе в систему он не работает.
  3. все пользователи (user1, user2, user3) имеют одинаковый пароль "password"
  4. пароль user1 не хешируется

Cakephp не хеширует пароль при входе в систему, а только при регистрации

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'
            ]
        ]);

Создан ли пользовательский номер в базе данных? Редактировалось ли оно с момента создания?

Jason Aller 26.05.2018 22:33

да, все пользователи были добавлены в базу данных, и в них не было внесено никаких изменений, за исключением: 1. user1 был создан без хэширования пароля, затем 2. хеширование пароля было использовано для других пользователей

vins 28.05.2018 17:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
253
1

Ответы 1

https://book.cakephp.org/3.0/en/controllers/components/authentication.html

Функция _setPassword работает только тогда, когда вы добавляете или редактируете объект в своей таблице.

Поскольку вы добавили user1 перед добавлением _setPassword в User Entity, почему он не был хеширован.

Также он не хеширует user1, когда вы входите в систему, так как ничего не меняется в User Entity в таблице.

Если вы хотите хешировать user1, просто отредактируйте его в панели администратора.

Я полностью осведомлен о том, что вы предложили. Но основная проблема заключается в том, что система не позволяет мне входить в систему с хешированием пароля или без него ... Более того, я попытался создать несколько пользователей, отключив хеширование, но он все еще сохраняет хеширование пароля для новых пользователей ... Я серьезно не понимаю, почему это происходит .... Есть предложения ???

vins 20.06.2018 18:46

Другие вопросы по теме