2012-11-07 161 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

相關問題