2011-12-26 28 views
12

trato de autenticación de usuario:Manual de usuario autentificar

<?php 

/** 
* @Route("/testLogin", name="testLogin") 
*/ 
public function testLoginAction() 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 
    $user = $em->getRepository('ApplicationDefaultBundle:User')->findOneBy(array('id' => 126)); 

    $providerKey = 'main'; 
    $token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles()); 

    $this->container->get('security.context')->setToken($token); 

    return $this->redirect($this->generateUrl('testCheck')); 
} 

/** 
* @Route("/testCheck", name="testCheck") 
*/ 
public function testCheckAction() 
{ 
    if (false === $this->get('security.context')->isGranted(
     'IS_AUTHENTICATED_REMEMBERED' 
    )) { 
     return new Response('Not logged'); 
    } 
    $user = $this->container->get('security.context')->getToken()->getUser(); 

    return new Response($user->getUsername.' is logged'); 
} 

pero consigo a la página de redirección permanente 302/login.

security: 
    encoders: 
     Application\Bundle\DefaultBundle\Entity\User: 
      algorithm: sha512 
      iterations: 24 
      encode_as_base64: true 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SPECIALIST: ROLE_USER 
     ROLE_EMPLOYER: ROLE_USER 
     ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     main: 
      entity: { class: Application\Bundle\DefaultBundle\Entity\User, property: username } 

    firewalls: 
     secured_area: 
      remember_me: 
       key:  MySecretKeyBlablabla 
       lifetime: 36000000 
       path: /
       domain: ~ 
      pattern: ^/ 
      form_login: 
       check_path: /login_check 
       login_path: /login 
       provider: main 
      logout: 
       path: /logout 
       target:/
      anonymous: true 

    access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

Código para autenticar que tomo de https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php

Error en app/logs/dev.log:

redirecting to authentication entry point (No Authentication Provider found for token of class "Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken".) [] [] 

no puedo acceder al sitio hasta que limpiar las cookies.

Respuesta

14

Probar el código de this answer. En su caso nombre de servidor de seguridad es secured_area:

// your controller action 
public function myAction() 
{ 

    // Authenticating user 
    $token = new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles()); 
    $this->get('security.token_storage')->setToken($token); 
    //For Symfony <= 2.3 
    //$this->get('security.context')->setToken($token); 
    $this->get('session')->set('_security_secured_area', serialize($token)); 

} 
+9

Reemplazar '' security.context' con security.token_storage' en las versiones actuales de Symfony. – althaus

0

Compruebe que ha configurado la sección encoders en security.yml, ya que la configuración no ha cambiado hace mucho tiempo y afecta a su problema.

+0

he añadido a mi pregunta completa security.yml –