如何将我的cakephp2项目迁移到cakephp3?

时间:2015-06-17 18:45:31

标签: passwords cakephp-3.0 transplant

我想将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 个答案:

答案 0 :(得分:2)

来自CakePHP 3 migration guide

  
      
  • 默认值现在是身份验证类使用的默认密码。它专门使用bcrypt哈希算法。如果要继续使用2.x中使用的SHA1哈希,请使用密码哈希' => '弱'在您的身份验证器配置中。
  •   
  • 添加了新的FallbackPasswordHasher以帮助用户迁移旧版本   密码从一种算法到另一种算法。检查AuthComponent的   文档了解更多信息。
  •   

阅读AuthComponent documentation会显示一个与此类似的示例:

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

当用户登录AuthComponent时,将使用Fallback密码哈希类,首先尝试Default哈希方法(在上面的代码中使用),然后Weak哈希

该文档还介绍了如何在登录时更新用户密码以使用更安全的Default哈希。

答案 1 :(得分:1)

请参阅Migration Guide,它解释了您需要做的所有事情,特别是它在Auth Component Section下提到:

  

默认值现在是身份验证类使用的默认密码。它专门使用bcrypt哈希算法。如果要继续使用2.x中使用的SHA1哈希,请使用密码哈希' => '弱'在您的身份验证器配置中。

有关详细信息,请参阅:http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#authcomponent