2011-12-26 38 views
12

Tôi cố gắng để xác thực người dùng:tay người dùng xác thực

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

Nhưng tôi nhận được 302 chuyển hướng đến/trang đăng nhập vĩnh viễn.

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 } 

Mã cho authenticate ta sẽ cất khỏi https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php

Lỗi trong app/logs/dev.log:

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

tôi không thể truy cập vào trang web cho đến khi tôi làm sạch các tập tin cookie.

Trả lời

14

Thử mã từ this answer. Trong trường hợp của bạn tên là tường lửa 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

Thay thế 'security.context' với 'security.token_storage' trong các phiên bản Symfony hiện hành. – althaus

0

Xác minh rằng bạn đã định cấu hình phần encoders trong security.yml, vì cấu hình đã thay đổi cách đây không lâu và ảnh hưởng đến vấn đề của bạn.

+0

tôi thêm vào câu hỏi của tôi đầy đủ security.yml –

Các vấn đề liên quan