在 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
我的任务是将用户数据库从一个 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