2012-11-07 162 views
1

我正在开发一个项目,其中一部分网站是安全的。用户身份验证的凭据存储在QuickBase(具有自定义API的在线数据库)中,密码使用自定义散列进行加密。Symfony 2自定义用户提供程序和身份验证

有人能给我一个高层次的需要构建和实现哪些类来支持从Web服务验证这些用户并使用我自己的密码哈希机制吗?

这里是我的security.yml:

security: 
    firewalls: 
     secured_area: 
      pattern: ^/account 
      provider: quickbase_users 
      form_login: 
       login_path: /login 
       check_path: /login_check 

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

    providers: 
     quickbase_users: 
      id: quickbase_user_provider 

    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

这里是我的路线:

login: 
    pattern: /login 
    defaults: { _controller: JMLWebsiteBundle:Security:login } 
login_check: 
    pattern: /login_check 

我提交用户后我目前得到这个错误/通过在/登录:

Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration? 
+0

你应该向你的'secured_area'防火墙添加'anonymous','logout'和什么是最重要的'form_login'属性。请参阅:[使用传统登录表单](http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form) – Crozin

+0

我不小心将它们从帖子中删除,但它们被添加。仍然找不到/ login_check控制器。 – doremi

+0

'login/check_path'应该是'form_login'的孩子,它就是 – Crozin

回答

2
  1. 创建您的User类实现Symfony\Component\Security\Core\User\UserInterface
  2. 创建一个自定义编码器服务:

    1. 创建一个实现Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface
    2. 注册该服务的编码器为您的用户类security.yml服务:

      security: 
          encoders: 
           MyCustomBundle\Entity\User: # Class/interface from point #1 
            id: my.encoder.service # Service id from point #2.1 
      
  3. 创建定制用户提供商:

    1. 创建一个实现Symfony\Component\Security\Core\User\UserProviderInterface
    2. 注册该服务为用户提供在security.yml服务:

      security: 
          [...] 
      
          providers: 
           my_custom_user_provider: 
            id: my.user_provider.service # Service id from point #3.1 
      

退房FOSUserBundle看到实现自定义用户提供的一个例子。

+0

我有用户和用户提供者。我不需要一个自定义身份验证提供程序吗? – doremi

+0

你能描述auth过程吗?有没有带有用户名/密码字段的表单?如果有,您将不需要自定义入口点/身份验证提供程序。 – Crozin

+0

是的 - 只是一个基本的用户名和密码字段。你可以发布一个示例security.yml可能看起来像这种情况? – doremi

相关问题