[Symfony2][FOSUserBundle] Utiliser l’adresse mail pour se connecter

FOSUserBundle a son propre provider pour que vous pouvez utiliser non seulement le nom d’utilisateur, mais aussi l’email pour ce connecter. Il suffit de changer une ligne dans security.yml


# app/config/security.yml
security:
    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

Par contre si vous voulez utiliser seulement l’adresse mail pour se connecter, il faut passer par une autre méthode. Selon la documentation d’une ancienne version de FosUserBundle, la méthode le plus « propre » et la moins risquer et de passer par un provider personnalisé.


<?php
namespace FOS\UserBundle\Security;

class EmailUserProvider extends UserProvider
{
    protected function findUser($username)
    {
        return $this->userManager->findUserByUsernameOrEmail($username);
    }
}

Comme vous pouvez remarquer notre provider personnalisé hérite de celui de FosUserBundle, et on a surchargé seulement une seule méthode.

Maintenant, nous allons l’ajouter comme un service à notre application :


<parameters>
    <parameter key="gmu.user_provider.email.class">Gmu\UserBundle\Security\GmuUserProvider</parameter>
  </parameters>
  <services>
    <service id="gmu.user_provider.email">
      <argument type="service" id="fos_user.user_manager" />
    </service>
  </services>

Nous avons injecté FOSUserManager parce que la classe parente en a besoin. Après cela, nous indiquant qu’on va utiliser notre service comme le provider par défaut :


# app/config/security.yml
security:
    providers:
        fos_userbundle:
            id: gmu.user_provider.email

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.