2015-03-13 209 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?这是我用于登录/身份验证。它几乎为你做。 – 2015-11-04 12:16:42

回答

0

的问题是在你的security.yml。当有人发送表单时,浏览器向/ login_check发送HTTP请求以检查登录名和密码。但是,由于用户未通过身份验证,因此应用不允许这样做。 您必须添加 '/ 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 }