Bonsoir, je suis en train de migrer un projet asses conséquent sur symfony et je parvient pas à migrer ma base de données utilisateurs.

J'ai une table membres avec 80 000+ entrées, vous comprendrai donc que je ne peux pas me permettre de perdre ces informations et qu'elles sont vitales pour le projet. C'est d'ailleurs dans l'optique d'apporter plus de confort à cette "masse" que nous avons décider de migrer vers symfony.

J'ai suivis les nombreux conseils et j'en suis venu à utiliser FOSUserBundle que j'ai surchargé manuellement avec les informations dont j'ai besoin.
Tout fonctionne, l'inscription, le login, logout.... mais je ne parvient pas à y importer ma base de données.

Tout d'abord, l'encodage des mots de passe actuel et celui de symfony n'est pas le même, dois-je uniformiser le tout (à savoir reprendre le même hash dans fosuserbundle que sur mon ancien système sha1). Ou reset le champ password pour tous les membres et les inviter à recréer un mdp via email ?

Si vous avez des exemples d’utilisations ou un retour d'expérience concernant la manipulation, je suis tout ouïe.
Actuellement je suis en train de simuler l'enregistrement des membres, non seulement c'est fastidieux, long et je suis certain qu'on peut utiliser une méthode bien plus efficace.

D'avance merci

3 réponses


FlYos
Réponse acceptée

J'ai du procéder à un action similaire il y a quelques temps, voici comment j'ai procédé :
1°) J'ai développez un script (en C) pour récupéré des pools de membres (1000) pour éviter d'avoir des problèmes (j'avais plus de 100 000 enregistrement)
2°) ensuite j'ai transformé mon ancien structure SQL vers la nouvelle structure de FOSUserBundle
3°) J'ai ensuite appliqué les rôles de chaque utilisateur (avec un tableau de correspondance)
4°) J'ai généré un nouveau mot de passe aléatoire (les mots de passe de l'ancienne base était hashé avec md5)
5°) J'ai envoyé un mail à chaque membre (actif) avec leurs nouveaux mot de passe

Je te conseil de faire des tirs à blanc sur une fausse base de donnée car j'ai eu quelques surprise au début ;)

ze0ne
Auteur

Merci de ton intervention, j'ai posté le même message sur différent forum et aucune réponse mise à part la tienne.
Pour le moment (je n'ai pas eu le temps de test ta méthode), j'ai procédé comme suit.
J'ai supprimé les doublons en triant sur l'adresse email.
J'ai créé en php un script qui génère des tableaux contenant le pseudo et l'adresse mail (les autres données ne sont pas indispensables à fosuserbundle). Puis via ce script dans mon controller, j'ai utilisé mon tableau via une boucle sur ce script

$userManager = $this->get('fos_user.user_manager');
$newItem = $userManager->createUser();
$newItem->setUsername($array'name']);
    $newItem->setEmail($array'email']);
    $newItem->setPlainPassword($randomPass);
    $newItem->setEnabled(false);
$userManager->updateUser($newItem, true);

Par défaut tous les comptes sont désactivés et je compte envoyer un mail aux membres pour réactiver leur compte.

Finalement je cheminement est similaire sauf que j'ai utilisé la méthode native pour créer les utilisateurs (pour le token... c'est plus "propre").

Pour l'instant ça fonctionne sur 2000 membres, j'ai pas encore terminé.

Si ça fonctionne sur 2000 ça devrait le faire sur les 80000 ;)
Par contre, je serai toi, je ne le ferai pas via un navigateur l'importation mais par une commande SF2. En CLI tu n'a pas de timeout par exemple, après il faut juste bien géré la mémoire sinon ça va pété en plein milieu.
Pense à bien unset tes objets lorsque tu n'en à plus besoin ;)