2011-12-26 2 views
12

Стараются аутентификации пользователя:Руководства пользователя Аутентифицировать

<?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'); 
} 

Но я получаю постоянную 302 редиректа на страницу входа /.

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 } 

Код для Authenticate я беру от https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php

Ошибка в приложение/журналы/dev.log:

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

Я не могу получить доступ к сайту, пока я не очистить куки.

ответ

14

Код подтверждения: this answer. В вашем случае имя брандмауэра 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

Заменить '' security.context' с security.token_storage' в текущей версии Symfony. – althaus

0

Проверьте, что вы сконфигурировали encoders раздел в security.yml, так как конфигурация изменилась не очень давно, и это влияет на вашу проблему.

+0

Я добавил к моему вопросу полного security.yml –

Смежные вопросы