2015-03-13 4 views
3

Я знаю, что это обычная вещь, но я не могу найти, какую ошибку я делаю, и я схожу с ума.Symfony2 Аутентификация пользователя

Я не могу войти в систему по форме входа, когда я отправляю форму, она возвращает себя без ошибок и не аутентифицируется.

Заранее благодарен!

Вот мой security.yml

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 
     #Cityincheck\AppBundle\Entity\User: 
      #algorithm: bcrypt 
      #cost: 12 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 

providers: 
    in_memory: 
     memory: 
      users: 
       ryan: 
        password: ryanpass 
        roles: 'ROLE_USER' 
       admin: 
        password: kitten 
        roles: 'ROLE_ADMIN' 

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

    login_firewall: 
     pattern: ^/login$ 
     anonymous: ~ 
    admin_area: 
     pattern: ^/* 
     form_login: 
      check_path: /login_check 
      login_path: /login 
      provider: in_memory 
      default_target_path: /admin 
     logout: 
      path: admin_logout 
      target: admin_login 
     #anonymous: ~ 
     #http_basic: 
     # realm: "Secured Demo Area" 

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

Мой routing.yml

admin_login: 
    path: /login 
    defaults: { _controller: AppBundle:AccessControl:login } 

admin_login_check: 
    path: /login_check 

И мой контроллер:

class AccessControlController extends Controller 
{ 

public function loginAction(Request $request) 
{ 
    $session = $request->getSession(); 

    // get the login error if there is one 
    if ($request->attributes->has(SecurityContextInterface::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(
      SecurityContextInterface::AUTHENTICATION_ERROR 
     ); 
    } elseif (null !== $session && $session->has(SecurityContextInterface::AUTHENTICATION_ERROR)) { 
     $error = $session->get(SecurityContextInterface::AUTHENTICATION_ERROR); 
     $session->remove(SecurityContextInterface::AUTHENTICATION_ERROR); 
    } else { 
     $error = null; 
    } 

    // last username entered by the user 
    $lastUsername = (null === $session) ? '' : $session->get(SecurityContextInterface::LAST_USERNAME); 

    return $this->render(
     'AppBundle::login.html.twig', 
     array(
      // last username entered by the user 
      'last_username' => $lastUsername, 
      'error'   => $error, 
     ) 
    ); 
} 
} 
+0

ли вы установили FOSUserBundle? Это то, что я использую для входа/аутентификации. Это в значительной степени делает это для вас. –

ответ

0

Проблема заключается в вашей security.yml. Когда кто-то отправляет форму, браузер отправил HTTP-запрос/login_check, чтобы проверить логин и пароль. Но приложение не позволяет это делать, поскольку пользователь не аутентифицирован. Вы должны добавить '/ login_check' в access_control

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

Или что

access_control: 
    - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, roles: ROLE_ADMIN } 
Смежные вопросы