我想将我的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的用户信息。你能告诉我如何建立一个成功的迁移项目吗?
- 默认值现在是身份验证类使用的默认密码哈希。它专门使用bcrypt哈希算法。如果要继续使用2.x中使用的SHA1哈希,请在身份验证器配置中使用“passwordHasher”=>“Weak”。
- 添加了新的FallbackPasswordHasher以帮助用户将旧密码从一种算法迁移到另一种算法。有关详细信息,请查看AuthComponent的文档。
阅读AuthComponent documentation显示了一个类似于此的示例:
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'passwordHasher' => [
'className' => 'Fallback',
'hashers' => ['Default', 'Weak']
]
]
]
]);
当用户登录AuthComponent时,将使用Fallback
密码hasher类,首先尝试使用Default
散列方法(在上面的代码中使用),然后使用Weak
hasher。
该文档还将向您展示如何在登录时更新用户密码以使用更安全的Default
hasher。
请参阅Migration Guide,它解释了您需要做的所有事情,特别是它在Auth Component Section下提到:
默认值现在是身份验证类使用的默认密码哈希。它专门使用bcrypt哈希算法。如果要继续使用2.x中使用的SHA1哈希,请在身份验证器配置中使用“passwordHasher”=>“Weak”。
请参阅:http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#authcomponent了解更多信息。