2011-10-12 53 views
3

我在这个项目中有两个表。一个表用于存储所有管理员用户详细信息的站点管理员,另一个表存储客户端到该站点的所有登录数据。如何在Symfony2中使用两个不同的表进行身份验证

目前,我可以使用管理员详细信息登录。但是,我现在正在尝试登录客户端的详细信息,但似乎没有工作。到目前为止,当用户点击一个链接时,它会去/ clientarea /登录。这个页面加载正常。但是,当我尝试登录时,出现错误。

我得到的错误是这样的:

无法找到路径 “/ clientarea/login_check” 控制器。也许你忘了在路由配置中添加匹配路由?

在我security.yml文件,我有以下代码:(顺便说一句,我使用的是明文仅用于开发,它会当它实时更改):

providers: 
    admin_db: 
     entity: { class: Shout\AdminBundle\Entity\User, property: username } 
    client_db: 
     entity: { class: Shout\AdminBundle\Entity\Userclients, property: username } 

encoders: 
    Shout\AdminBundle\Entity\User: 
     algorithm: plaintext 
    Shout\AdminBundle\Entity\Userclients: 
     algorithm: plaintext 

firewalls: 
    secured_area: 
     pattern: ^/ 
     anonymous: ~ 
     provider: admin_db 
     form_login: 
      check_path: /login_check 
      login_path: /login 
     logout: 
      path: /logout 
      target: /index 
    client_area: 
     pattern: ^/ 
     anonymous: ~ 
     provider: client_db 
     form_login: 
      check_path: /clientarea/login_check 
      login_path: /clientarea/login 
     logout: 
      path: /clientarea/logout 
      target: /index 

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

在我的routing.yml中,我有这样的代码:

login: 
    pattern: /login 
    defaults: { _controller: ShoutAdminBundle:Security:login } 

    login_check: 
     pattern: /login_check 

    logout: 
     pattern: /logout 

    clientlogin: 
     pattern: /clientarea/login 
     defaults: { _controller: ShoutAdminBundle:Security:clientlogin } 

    clientlogin_check: 
     pattern: /clientarea/login_check 

    clientlogout: 
     pattern: /clientarea/logout 

这里是控制器中的代码。该代码是登录和ClientLogin的功能是相同的,那就是唯一不同的是它们指向的树枝文件:

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

// get the login error if there is one 
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
    $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
} else { 
    $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
} 

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

客户端登录表单点的行动路径clientlogin_check。

我在做什么错?

回答

2

我设法让它工作,但以一种非常基本的方式。由于截止日期的限制,我没有时间让登录页面看起来很漂亮。

但这里是代码:

client_area: 
     pattern: ^/clientarea 
     anonymous: ~ 
     provider: client_db 
     http_basic: 
      realm: "Secured Client Area" 

基本上,你可以让用户从多个表。但是,我仍然无法使用正确的登录表单工作。但基本的HTTP登录框同样适用于我正在做的事情。

相关问题