2013-09-16 5 views
1

Я новичок в Symfony2, и я пытаюсь выучить страницу входа в Symfony2, но система дает мне эту ошибкуне authanticat пользователя в Symfony2

Контекст безопасности не содержит маркер аутентификации. Одна из возможных причин может заключаться в том, что для этого URL-адреса не установлен брандмауэр.

Мой security.yml код:

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: admin, roles: [ 'ROLE_ADMIN' ] } 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 


     login: 
      pattern: ^/demo/secured/login$ 
      security: false 

     emp: 
      pattern: ^/emp 
      form_login: 
       check_path: acme_radixemp_logincheck 
       login_path: acme_radixemp_login 
      logout: 
       path: acme_radixemp_logout 
       target: demo 
      #anonymous: ~ 
      #http_basic: 
      # realm: "Secured Demo Area" 

    access_control: 
     - { path: ^/emp, roles: ROLE_ADMIN } 

И я пытаюсь запустить /emp из URL

И моя функция Войти в контроллере:

public function loginAction(Request $request) 
{ 
    $login = new user(); 
    $form = $this->createFormBuilder($login) 
     ->add('Username','text',array('attr' => array('size' => '50',"value"=>"",'class'=>'form-control','placeholder'=>"Please Enter Your Username"))) 
     ->add('Password', 'password',array('attr' => array('size' => '50',"value"=>"",'class'=>'form-control','placeholder'=>"Enter Your Password"))) 
     ->add('login', 'submit',array('attr' => array('class '=>"btn btn-success btn-lg","style"=>"margin-top:15px"))) 
     ->getForm() 
    ; 

    $form->handleRequest($request); 
    $session = $this->getRequest()->getSession(); 
    $url = $this->generateUrl("emp"); 
    $loginurl = $this->generateUrl("acme_radixemp_login",array("login"=>"fail")); 

    $postData = $request->request->get('form'); 
    if(!empty($postData)) { 

     $repository = $this->getDoctrine()->getRepository('AcmeRadixempBundle:user'); 
     $user_name = $repository->findOneBy(array('username' => $postData['Username'],'password'=>$postData['Password'])); 

     if($user_name=="") { 
      return $this->redirect($loginurl); 
     } else { 
      //$this->get('security.context')->isGranted('ROLE_ADMIN'); 

      if(TRUE ===$this->get('security.context')->isGranted('ROLE_ADMIN')) 
      { 
       $session->set('username', $postData['Username']); 
       return $this->redirect($url); 
      } 
     } 
    } 
} 

    return $this->render('AcmeRadixempBundle:Default:login.html.twig',array('login'=> $form->createView())); 

} 

Что Я забыл сделать?

+0

Покажите нам пути для маршрутов входа. –

ответ

2

Пути check_path и login_path не являются стандартными. Если действия для ваших настроек не реализованы и правильные пути не зарегистрированы, ваша функция входа в систему не будет работать.

Я предлагаю вам последовать примеру в книге Symfony:

Using a Traditional Login Form

Я последовал его шаг за шагом, и он работал сразу. Для простых логинов вам не понадобится вообще создавать loginAction или logoutAction, Symfony сделает все для вас. Единственное, что вам нужно создать (и вы можете скопировать его из ссылки, которую я вам отправил), - это форма входа в систему. Вы можете найти любую другую более сложную информацию в книге и поваренной книге, которые доступны на веб-сайте Symfony бесплатно.

Надеюсь, это поможет.

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