Bonjour,
Je me retouve face à une réflexion suite à une procedure d'inscription d'un membre non conventionnel.
Ce que je fais
Je finalise la partie administrative du site institutionnel de mon entreprise sous Symfony 5 et je serai certainement le seul utilisateur à l'administrer (newsletter, formulaire de contact, statistiques, bref du classique)
Comme il n'y aura pas de page "register", j'ai prévu la création d'un nouvel utilisateur via ma page d'administration.
J'ai crée une toute petite fonction qui attribue un mot de passe aléatoire :
class RandomPassword
{
/**
*
* @param [type] $lenght
* @return void
*/
public function random_password($length)
{
$alphabet = "0123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN";
return substr(str_shuffle(str_repeat($alphabet, $length)), 0, $length);
}
}
Ce qui donne ceci :
Par la suite, la personne reçoit un mail avec son mot de passe et lui demande de la changer via sa page de profile.
Le controller :
/**
* @Route("/new", name="user_new", methods={"GET","POST"})
*/
public function new(Request $request, RandomPassword $random, UserPasswordEncoderInterface $passwordEncoder, EmailVerifier $emailVerifier): Response
{
$title = "Créer un nouvel admnistrateur";
$user = new User();
$new_password = $random->random_password(10);
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$temp_password = $form->get('password')->getData();
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$form->get('password')->getData()
)
);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
// generate a signed url and email it to the user
$emailVerifier->sendEmailConfirmation(
'app_verify_email',
$user,
(new TemplatedEmail())
->from(new Address('contact@com4munity.com', 'Com4Munity, Votre inscription'))
->to($user->getEmail())
->subject('Veuillez confirmer votre email')
->htmlTemplate('email/inscription_email.html.twig')
// pass variables (name => value) to the template
->context([
"firstname" => $user->getFirstname(),
"lastname" => $user->getLastname(),
"password" => $temp_password
])
);
return $this->redirectToRoute('user_index');
}
return $this->render('user/new.html.twig', [
'user' => $user,
'temp_password' => $new_password,
'form' => $form->createView(),
'title' => $title,
]);
}
Ce que je veux
Au final cette méthode ne me satisfait pas vraiment au niveau des bonnes pratiques et je songe plutôt à envoyer un lien par mail pour que la personne puisque s'inscrire.
Qu'en pensez vous ?