在symfony项目之间转移FOS_USERS

时间:2016-01-20 00:55:42

标签: php symfony fosuserbundle

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

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

FOSUserBundle中的密码存储还会导致项目之间的密码+盐组合无效,以及如何将旧项目的原始数据传输到新项目中。

我的输入是一个包含所有用户表详细信息的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);
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您可以在新项目中使用相同的表(FOSUSER),或者只是转储表并将其移动到新数据库。 如果你这样做,你必须保持相同的"编码器配置"作为旧项目的安全性。 UserPassword只需要salt,PlainPassword和编码用户的用户来创建散列密码。如果您在新项目中的配置中具有相同的配置(如旧配置),则一切都会正常。希望我帮助你..让我们知道。

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