Как перевести проект cakephp2 на cakephp3?

Я хочу, чтобы проект cakephp2 был перенесен на проблему cakephp3. Я должен сохранить информацию пользователя. Как заставить их иметь такой же способ генерации пароля? Вот как я генерирую пароли с помощью cakephp2.

App::uses('AuthComponent', 'Controller/Component');
....
public function beforeSave($options = array()) {
      $this->data['User']['password'] = AuthComponent::password(
      $this->data['User']['password']
    );
    return true;
}

Это способ, которым cakephp3 документ генерирует пароли.

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

/**
 * User Entity.
 */
class User extends Entity
{

    /**
     * Fields that can be mass assigned using newEntity() or patchEntity().
     *
     * @var array
     */
    protected $_accessible = [
        'email' => true,
        'password' => true,
        'bookmarks' => true,
    ];

    protected function _setPassword($value)
    {
        $hasher = new DefaultPasswordHasher();
        return $hasher->hash($value);
    }

}

Они не один и тот же текст, генерируют один и тот же шифротекст. Поэтому я не могу сохранить информацию о пользователях cakephp2. Не могли бы вы рассказать мне, как быть успешным проектом миграции?

2 ответа

Решение

Из руководства по миграции CakePHP 3:

  • По умолчанию теперь используется пароль по умолчанию, используемый классами аутентификации. Он использует исключительно алгоритм хеширования bcrypt. Если вы хотите продолжить использовать хеширование SHA1, используемое в 2.x, используйте 'passwordHasher' => 'Weak' в вашей конфигурации аутентификатора.
  • Был добавлен новый FallbackPasswordHasher, чтобы помочь пользователям переносить старые пароли из одного алгоритма в другой. Проверьте документацию AuthComponent для получения дополнительной информации.

Чтение документации AuthComponent показывает пример, подобный этому:

$this->loadComponent('Auth', [
    'authenticate' => [
        'Form' => [
            'passwordHasher' => [
                'className' => 'Fallback',
                'hashers' => ['Default', 'Weak']
            ]
        ]
    ]
]);

Когда пользователь входит в AuthComponent будет использовать Fallback класс хэша пароля, который сначала попробует Default метод хеширования (используется в вашем коде выше), а затем Weak мясорубка.

В документации также показано, как обновить пароли пользователей при входе в систему, чтобы использовать более безопасные Default мясорубка.

Пожалуйста, ознакомьтесь с Руководством по миграции, оно объясняет все, что вам нужно сделать, в частности, это упоминается в разделе Auth Component:

По умолчанию теперь используется пароль по умолчанию, используемый классами аутентификации. Он использует исключительно алгоритм хеширования bcrypt. Если вы хотите продолжить использовать хеширование SHA1, используемое в 2.x, используйте 'passwordHasher' => 'Weak' в вашей конфигурации аутентификатора.

Пожалуйста, смотрите: http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html для получения дополнительной информации.

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