2011-12-26 11 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 } 

コード私はアプリ/ログ/ dev.logでhttps://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php

エラーから取る認証のために:私はクッキーをきれいにするまで

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

に加えます。 – althaus

0

encodersセクションがsecurity.ymlに設定されていることを確認してください。構成はあまり変わらず、問題に影響します。

+0

私は '現在のバージョンのsymfonyでは' security.token_storage'とsecurity.context'を交換して、私の質問のフルのsecurity.yml –