Loguear un usuario manualmente en Symfony2
Es posible que queramos loguear automaticamente a un usuario en Symfony2 sin que haga falta que introduzca su email y contraseña. El caso típico es cuando un usuario se acaba de registrar en nuestra web y queremos loguearle en el sistema sin que tenga que volver a introducir sus datos.
En versiones anteriores a Symfony 2.3, este código funcionaba correctamente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // security.yml providers: main: entity: { class: ApplicationBundleDefaultBundleEntityUser, property: username } firewalls: secured_area: pattern: ^/ form_login: check_path: /login_check login_path: /login logout: path: /logout target: / anonymous: ~ |
Y en nuestro código teníamos lo siguiente:
1 2 3 4 | $user = $em->getRepository('ApplicationDefaultBundle:User')->findOneBy(array('id' => 117)); $provider_name = "main"; $token = new UsernamePasswordToken($user, null, $provider_name, $user->getRoles()); $this->get('security.context')->setToken($token); |
A partir de Symfony 2.3, esto ha cambiado un poco. En el código anterior vemos que a la clase UsernamePasswordToken le pasamos el nombre del provider como tercer parámetro.
En Symfony2 >= 2.3 tenemos que pasar el nombre del firewall y en el security.yml, especificar que provider utiliza ese firewall.
Lo vemos a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // security.yml providers: main: entity: { class: ApplicationBundleDefaultBundleEntityUser, property: username } firewalls: secured_area: pattern: ^/ provider: main # añadimos el nombre del provider a utilizar form_login: check_path: /login_check login_path: /login logout: path: /logout target: / anonymous: ~ |
Y el código lo modificaremos de la siguiente forma:
1 2 3 4 | $user = $em->getRepository('ApplicationDefaultBundle:User')->findOneBy(array('id' => 117)); $firewall_name = "secured_area"; // Ahora utilizamos el nombre del firewall $token = new UsernamePasswordToken($user, null, $firewall_name, $user->getRoles()); $this->get('security.context')->setToken($token); |
Espero que os sirva de ayuda 🙂
Muy util, sobre todo cuando usas cuentas de Facebook o Twitter para logear usuarios.