我被赋予了将用户数据库从一个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);
}
}
}
答案 0 :(得分:1)
您可以在新项目中使用相同的表(FOSUSER),或者只是转储表并将其移动到新数据库。 如果你这样做,你必须保持相同的"编码器配置"作为旧项目的安全性。 UserPassword只需要salt,PlainPassword和编码用户的用户来创建散列密码。如果您在新项目中的配置中具有相同的配置(如旧配置),则一切都会正常。希望我帮助你..让我们知道。
//Security.yml
security:
encoders:
Site\UserBundle\Entity\User: sha512
FOS\UserBundle\Model\UserInterface: sha512