2013-07-01 4 views
0

у меня есть проблемы с простейшим разрешением в недавнем Symfony2,Symfony2 - проблема безопасности с проверкой входа

моего security.yml:

безопасность: кодеры: Symfony \ Component \ Security \ Основные \ User \ User : открытый текст

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

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

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

    secured_area: 
     pattern: ^/admin 
     form_login: 
      check_path: check 
      login_path: login 
     logout: 
      path: /logout 
      target: /index 
     #anonymous: ~ 
     #http_basic: 
     # realm: "Secured Demo Area" 

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

и часть DefaultControler.php

public function loginAction() { 

    $request = $this->getRequest(); 
    $session = $request->getSession(); 

    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
    } else { 
     $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
    } 

    return $this->render('JimmyTestBundle:Default:login.html.twig', array(
     // last username entered by the user 
     'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
     'error'   => $error, 
    )); 
} 

public function checkAction() 
{ 

} 

Я завариваю книгу поваров с сайта symfony, checkAction, которая должна интерпретироваться по уровню брандмауэра, но, вероятно, не потому, что она пытается что-то сделать, когда я пытаюсь войти.

Контроллер должен вернуть ответ (null). Вы забыли добавить оператор возврата в свой контроллер? 500 Внутренняя ошибка сервера - LogicException

Мой login.html.twig также почти скопировать и вставить из учебников. Любой совет?

+0

Он может ожидать объект возврата из вашей функции checkAction в вашем контроллере. Вы пытались удалить это, если вы не используете его прямо сейчас? – gavgavgavg

ответ

0

В вашем брандмауэре «secure_area» отсутствует поставщик безопасности, чтобы фактически уловить запрос, отправленный на check_path. поставщики настроены под security.providers так:

providers: 
    your_provider_name: name_of_provider_service 

прямо сейчас ... у вас есть только один поставщик с именем «in_memory», который является специальным поставщиком обеспечивается фреймворка.

добавьте его в брандмауэр «secure_area», чтобы использовать его для аутентификации учетных данных, отправленных на путь check_path.

firewalls: 
    secured_area: 
     pattern: ^/admin 
     provider: in_memory 

... и удалить ненужный «вход» брандмауэр из конфигурации

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

Не забудьте упомянуть контроллер в routing.yml, в вашем случае что-то вроде

_demo_secured: 
    resource: "@JimmyTestBundle/DefaultController.php" 
    type:  annotation 
Смежные вопросы