Estoy primero especificando los usuarios en el archivo de configuracion, pues es la primera vez que uso Symfony, pero luego la idea es que cuando esto funcione pasar a usar usuarios en la base de datos.
Este es el archivo security.yml:
Código:
Y este el archivo de route.yml:jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
security: false
secured_area:
pattern: ^/(secured/.*|login_check)
form_login:
check_path: /login_check
login_path: /login
logout:
path: /logout
target: /
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
Código:
El controlador del formulario de login:compartida_compartida:
resource: "@CompartidaCompartidaBundle/Resources/config/routing.yml"
prefix: /
login_check:
pattern: /login_check
login:
pattern: /login
defaults: { _controller:CompartidaCompartidaBundle:Security:login }
logout:
pattern: /logout
Código:
La plantilla del formulario de login:<?php
namespace Compartida\CompartidaBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
class SecurityController extends Controller
{
public function loginAction()
{
$peticion = $this->getRequest();
$sesion = $peticion->getSession();
// obtiene el error de inicio de sesión si lo hay
if ($peticion->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $peticion->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $sesion->get(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render('CompartidaCompartidaBundle:Security:login.html.twig', array(
// el último nombre de usuario ingresado por el usuario
'ultimo_nombreusuario' => $sesion->get(SecurityContext::LAST_USERNAME),
'error' => $error,
));
}
}
?>
Código:
{% extends 'CompartidaCompartidaBundle::base.html.twig' %}
{% block main %}
{% if error %}
<p>{{ error.message }}</p>
{% endif %}
<form action="{{ path('login_check') }}" method="post">
<label for="nombreusuario">Nombre:</label>
<input type="text" id="nombreusuario" name="_username" value="{{ ultimo_nombreusuario }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<input type="submit" name="login" />
</form>
{% endblock %}
{% block login %}{% endblock %}


