Symfony2 $user->setPassword() updates password as plain text [DataFixtures + FOSUserBundle]
Since you are using FOSUserBundle, you can use UserManager
to do this. I would use this code (assuming you have $this->container
set):
public function load(ObjectManager $manager){ $userManager = $this->container->get('fos_user.user_manager'); $userAdmin = $userManager->createUser(); $userAdmin->setUsername('System'); $userAdmin->setEmail('system@example.com'); $userAdmin->setPlainPassword('test'); $userAdmin->setEnabled(true); $userManager->updateUser($userAdmin, true);}
Call setPlainPassword instead.
<?phpnamespace Acme\SecurityBundle\DataFixtures\ORM;use Doctrine\Common\DataFixtures\FixtureInterface;use Symfony\Component\DependencyInjection\ContainerAwareInterface;use Symfony\Component\DependencyInjection\ContainerInterface;use Doctrine\Common\Persistence\ObjectManager;use Acme\SecurityBundle\Entity\User;class LoadUserData implements FixtureInterface, ContainerAwareInterface{ private $container; public function setContainer(ContainerInterface $container = null) { $this->container = $container; } public function load(ObjectManager $manager) { $userAdmin = new User(); $userAdmin->setUsername('System'); $userAdmin->setEmail('system@example.com'); $userAdmin->setPlainPassword('test'); $userAdmin->setRoles(array('ROLE_SUPER_ADMIN')); $manager->persist($userAdmin); $manager->flush(); }}
Four lines of code and you are done. It will handle everything for you:
$userManager = $this->container->get('fos_user.user_manager'); $user->setPlainPassword($password); $userManager->updatePassword($user);