Migrating legacy users to symfony2 Migrating legacy users to symfony2 symfony symfony

Migrating legacy users to symfony2


Figured it out!

Create a custom encoder and use FOSAdvancedEncoder bundle to select the appropriate encoder.

1. Create the encoder

    <?php    namespace Acme\MyBundle\Security\Encoder;    use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;    class LegacyEncoder implements PasswordEncoderInterface {        public function encodePassword($raw, $salt)        {            // Your Custom encoder logic            return $something         }        public function isPasswordValid($encoded, $raw, $salt)        {            return $encoded === $this->encodePassword($raw, $salt);        }    }

2. Register your encoder as service

services:    acme.legacy_encoder:        class: Acme\MyBundle\Security\Encoder\LegacyEncoder

3. Install FOSAdvancedEncoderBundle

Look here: https://github.com/friendsofsymfony/FOSAdvancedEncoderBundle/blob/master/Resources/doc/index.md

4. Configure your encoders

In app/config.yml:

fos_advanced_encoder:    encoders:        FOS\UserBundle\Model\UserInterface: sha512        legacy_encoder:            id: acme.legacy_encoder

5. Implement the encoder aware interface in your User Class

use FOS\AdvancedEncoderBundle\Security\Encoder\EncoderAwareInterface;use FOS\UserBundle\Entity\User as BaseUser;class User extends BaseUser implements EncoderAwareInterface {  ...  public function getEncoderName() {      if($this->islegacy()) {          return "legacy_encoder";      }      return NULL;  }}

Remember to add a boolean field to administer if a user is a legacy user or not.

That's it.


Maybe the thread about exporting members from ExpressionEngine to Wordpress will help you.

I don't see any difficulties other than exporting the results from a custom query to the FOSUserBundle structure.

Important things to remember:

  • As Derek Hogue greatly points out on that thread, users will most likely have to reset their passwords
  • You will have to understand the both structures really well in order to correctly import data