Как перевести проект 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 для получения дополнительной информации.