在 symfony 项目之间传输 FOS_USERS

Transferring FOS_USERS between symfony projects

我的任务是将用户数据库从一个 FOSUserBundle/Symfony 项目转移到另一个项目。

我的旧项目示例用户已转移到包含所有相同字段 [盐、密码等] 的新项目,但我无法使用相同的用户名/密码组合登录。

FOSUserBundle 中的密码存储还有哪些内容会使项目之间的密码 + salt 组合无效,以及如何将旧项目的原始数据传输到新项目中。

我的输入是一个包含所有用户 table 详细信息的 JSON 文件。我通过 PHP 导入它,并在不使用 fos_user.user_manager 的情况下在循环中创建和保留用户对象。

foreach ($obj as $userData) {
    if (isset($userData['personalDetails'])) {
        if (isset($userData['personalDetails']['firstName'])) {
           /** @var User $user */
           $user = new User();
           $user->setId($userData['id']);
           $user->setSalt($userData['salt']);
           $user->setPassword($userData['password']);
           $user->setUsername($userData['email']);
           $user->setEmail($userData['email']);
           $user->setEnabled($userData['enabled']);
           $user->setExpired($userData['expired']);
           $user->getPersonalDetails()->setFirstName($userData['personalDetails']['firstName']);
           $user->getPersonalDetails()->setLastName($userData['personalDetails']['lastName']);

           $user->setFacebookId($userData['facebookId']);
           $user->setFacebookAccessToken($userData['facebookAccessToken']);
           $user->setGoogleId($userData['googleId']);
           $user->setGoogleAccessToken($userData['googleAccessToken']);

           $this->getDoctrine()->getManager()->persist($user);
            }
        }
    }

您可以在新项目中使用相同的 table (FOSUSER),或者直接转储 table 并将其移至新数据库。 如果这样做,您必须保持与旧项目相同的 "Encoder configuration" 安全性。 UserPassword 只需要 salt,PlainPassword 和 user 编码的用户来创建散列密码。如果你在新项目的配置中有与旧项目相同的配置,一切都会好的。希望我能帮助你.. 让我们知道。

    //Security.yml
    security:
        encoders:
            Site\UserBundle\Entity\User: sha512
            FOS\UserBundle\Model\UserInterface: sha512