Gérer vos utilisateurs avec FOSUserBundle

Vous venez d’installer un projet symfony 3.x et vous voulez une gestion utilisateurs simple et efficace ? C’est FosUserBundle qu’il vous faut ! Ce bundle va gérer la connexion, le profil, le mot de passe oublié, les rôles, …

Je vais détailler pas à pas les étapes pour l’installer, il faut tout d’abord récupérer les sources :

composer require friendsofsymfony/user-bundle "~2.0@dev" 

Il faut ensuite ajouter le bundle au kernel :

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
new FOS\UserBundle\FOSUserBundle(), //Ligne à ajouter
];

Il faut maintenant créer l’entité User, à l’intérieur vous mettez ce que vous voulez ! (nom, prénom, date de naissance, …), FOSUserBundle générera automatiquement les champs username, password, rôles, mail, …
Voici celle que propose le créateur (valable si vous utilisez doctrine) :

// src/AppBundle/Entity/User.php

namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

public function __construct()
{
parent::__construct();
// your own logic
}
}

Vous pouvez déjà créer la table dans la base de données :

php bin/console doctrine:schema:update --force

Il faut maintenant configurer le fichier security.yml, là idem j’ai récupéré celui du créateur :


# To get started with security, check out the documentation:
# http://symfony.com/doc/current/book/security.html
security:

encoders:
FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy: # Sert à déterminer les rôles, dans ce cas le ROLE_ADMIN a le rôle ROLE_USER, le rôle ROLE_SUPER_ADMIN a le rôle ROLE_ADMIN et donc aussi le ROLE_USER.
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
fos_userbundle:
id: fos_user.user_provider.username

firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager

logout: true
anonymous: true # Autorise les utilisateurs anonyme (ceux qui ne se sont pas connectés)

access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } # la page /login peut-être accéder par un utilisateur anonyme, logique sinon personne ne pourrait se connecter
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN } # toutes les pages sous /admin ne pourront être vu que par les utilisateurs ayant le rôle ROLE_ADMIN

Il faut maintenant ajouter la configuration du bundle :

fos_user:
db_driver : orm # dans le cas de doctrine
firewall_name : main
user_class : AppBundle\Entity\User

Il ne reste plus qu’à ajouter les routes du bundle :

# app/config/routing.yml
fos_user :
resource : "@FOSUserBundle/Resources/config/routing/all.xml"

La configuration est terminée, vous pouvez maintenant ajouter le super administrateur en ligne de commande :

php bin/console fos:user:create username --super-admin

et pour voir si tout fonctionne, vous connectez sur cette page : http://localhost/app_dev.php/login
Si vous avez un libellé du genre :security.login.username, il faut modifier dans le fichier config.yml la ligne :

 translator: ~ 

Vos utilisateurs peuvent maintenant créer un compte sur votre site.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *