Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/04/2013, 12:22
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 8 meses
Puntos: 1
Login sin recordar el usuario logueado (Error)

Hola, estoy intentando con Symfony hacer un login de usuarios, en principio parece como si funcionara bien, tiene su formulario de login, si pongo mal el usuario y la clave me vuelve a mandar al formulario diciendome que las credenciales estan mal, y si las pongo bien me redirige al inicio de la web, hasta ahi bien, el problema es que en la barra de depuración del entorno de desarrollo siempre aparece como sin usuario autenticado, y si intento en la pagina principal obtener el usuario para mostrar el nombre de usuario logueado al inicio, para ver si esta logueandome, pues nunca me aparece, es como si me autenticara bien pero luego olvidara las credenciales, no entiendo por que sucede. ¿Alguna idea?

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:
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 }
Y este el archivo de route.yml:
Código:
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
El controlador del formulario de login:
Código:
<?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,
    ));
  }
}

?>
La plantilla del formulario de login:
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 %}
__________________
JHG