Caricare gli utenti attivi da un database con Symfony e Doctrine.
Il codice è solo teorico, non è pronto all’uso.
Vedere la lezione successiva ‘Symfony – Simple Registration Form – Doctrine’ per testare del codice pronto all’uso.
1. Creiamo il Database da PhpMyAdmin:
Database: test_project
Tabella: app_users
Campi:
– Id char(11) AUTO_INCREMENT
– username char (25) UNIQUE
– password char (60) UNIQUE
– email char (60) UNIQUE
– is_active BOOLEAN -> se l’utente è abilitato
2. Creiamo l’entità src/AppBundle/Entity/User.php
<?php // src/AppBundle/Entity/User.php namespace AppBundle\Entity; // namespace per usare Doctrine use Doctrine\ORM\Mapping as ORM; // namespace per gestire gli Utenti e ottenere le password criptate use Symfony\Component\Security\Core\User\UserInterface; /** * @ORM\Table(name="app_users") * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository") */ // implements aggiunge questi metodi a UserInterface di Symfony class User implements UserInterface, \Serializable { /** * @ORM\Column(type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\Column(type="string", length=25, unique=true) */ private $username; /** * @ORM\Column(type="string", length=64) */ private $password; /** * @ORM\Column(type="string", length=60, unique=true) */ private $email; /** * @ORM\Column(name="is_active", type="boolean") */ private $isActive; public function __construct() { $this->isActive = true; // costruttore se l'utente è attivo // may not be needed, see section on salt below // $this->salt = md5(uniqid(null, true)); } public function getUsername() { return $this->username; } // il seme o sale utilizzato per l'encode della password // se uso bcrypt non è necessario perchè gestisce il seme automaticamente, e il metodo ritorna null public function getSalt() { // you *may* need a real salt depending on your encoder // see section on salt below return null; } public function getPassword() { return $this->password; } public function getRoles()// i ruli concessi all'utente { return array('ROLE_USER'); } public function eraseCredentials()// rimuove i dati sensibili dell'utente { } // Serialize // Alla fine di ogni - request - l'oggetto User viene trasformato in un array (serialize) e salvato nella sessione // Alla richiesta successiva viene ricaricato dalla sessione e riconvertito (unserialize) /** @see \Serializable::serialize() */ public function serialize() { return serialize(array( $this->id, $this->username, $this->password, // see section on salt below // $this->salt, )); } /** @see \Serializable::unserialize() */ public function unserialize($serialized) { list ( $this->id, $this->username, $this->password, // see section on salt below // $this->salt ) = unserialize($serialized); } }
3. Modifichiamo app/config/security.yml
# To get started with security, check out the documentation: # http://symfony.com/doc/current/security.html # app/config/security.yml security: encoders: AppBundle\Entity\User: algorithm: bcrypt # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded providers: in_memory: memory: ~ test_project: entity: class: AppBundle:User property: username # if you're using multiple entity managers # manager_name: customer firewalls: # disables authentication for assets and the profiler, adapt it according to your needs dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: ~ # activate different ways to authenticate pattern: ^/ http_basic: ~ # http://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate #http_basic: ~ # http://symfony.com/doc/current/cookbook/security/form_login_setup.html #form_login: ~
Configuro i parametri di security per puntare a User.php
security: encoders: AppBundle\Entity\User: algorithm: bcrypt ... test-project: entity: class: AppBundle:User property: username
Bibliografia:
symfony.com/doc/current/security/entity_provider.html#security-serialize-equatable
api.symfony.com/3.2/Symfony/Component/Security/Core/User/UserInterface.html#method_getRoles