如何将我的 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 AppModelEntity;
use CakeAuthDefaultPasswordHasher;
use CakeORMEntity;
/**
 * 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 用户信息。你能告诉我如何建立一个成功的迁移项目吗?

来自 CakePHP 3 迁移指南:

  • 默认值现在是身份验证类使用的默认密码哈希器。它只使用bcrypt哈希算法。如果要继续使用 2.x 中使用的 SHA1 哈希,请在身份验证器配置中使用"passwordHasher"=>"弱"。
  • 添加了一个新的 FallbackPasswordHasher 来帮助用户迁移旧的 从一种算法到另一种算法的密码。检查身份验证组件的 文档以获取更多信息。

阅读 AuthComponent 文档显示了一个类似于下面的示例:

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

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

该文档还继续向您展示如何在登录时更新用户密码以使用更安全的Default哈希器。

请参阅迁移指南,它解释了您需要执行的所有操作,特别是在身份验证组件部分下提到了这一点:

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

请参阅:http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#authcomponent 了解更多信息。

最新更新