Symfony 2自定义用户提供商&认证

时间:2012-11-07 15:07:45

标签: symfony

我正在开展一个项目,其中一部分网站是安全的。 auth用户的凭据存储在QuickBase(带有自定义API的在线数据库)中,密码使用自定义哈希进行加密。

有人可以给我一个高级别的参与,我需要构建和实现哪些类来支持从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

我目前在/ login:

提交用户/通行证后收到此错误
Unable to find the controller for path "/login_check". Maybe you forgot to add the matching route in your routing configuration?

1 个答案:

答案 0 :(得分:2)

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

    1. 创建实施Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface
    2. 的服务
    3. 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. 的服务
    3. security.yml

      中将该服务注册为用户提供商
      security:
          [...]
      
          providers:
              my_custom_user_provider:
                  id: my.user_provider.service # Service id from point #3.1
      
  4. 查看FOSUserBundle以查看自定义用户提供程序的实施示例。