2013-02-23 40 views
7

Nhà cung cấp xác thực tùy chỉnh Symfony2 của tôi bây giờ appears to be working.Nhà cung cấp người dùng thực thể Symfony2 ghi đè nhà cung cấp xác thực tùy chỉnh

Provider tài

Tôi gần như sử dụng FOSUserBundle nhưng tôi thậm chí không có địa chỉ email cho người dùng của tôi và tôi không cần thêm chức năng hoặc biến chứng.

Vì vậy, thay vào đó, tôi chỉ sử dụng entity provider.

tôi đặt encoder của tôi để rõ vì các thư viện client API xử lý đó đối với tôi, nhưng than ôi, trở ngại khác: nó có vẻ như Người dùng hiện nay đang được chứng thực chống lại những hồ sơ tài.

Trước khi triển khai nhà cung cấp dịch vụ người dùng, biểu mẫu đăng nhập của tôi đã cung cấp cho tôi phản hồi hợp lệ: thông tin xác thực không mang lại lỗi, thông tin đăng nhập xấu dẫn đến "lỗi người dùng/lỗi không chính xác" tùy chỉnh của tôi.

Bây giờ, ngay cả khi tôi cung cấp thông tin xác thực tôi biết là chính xác, tất cả những gì tôi nhận được là thông báo lỗi "Thông tin đăng nhập không hợp lệ", as if I'm implementing the UserAuthenticationProvider, nhưng theo hiểu biết tốt nhất của tôi thì không. Nhà cung cấp tùy chỉnh của tôi directly implements the AuthenticationProviderInterface.

Vì vậy, tại thời điểm này, tôi cho rằng tôi đã triển khai không chính xác nhà cung cấp dịch vụ người dùng thực thể, sao cho nó bằng cách nào đó sẽ ghi đè nhà cung cấp xác thực tùy chỉnh của tôi. Cách chính xác để định cấu hình nhà cung cấp người dùng thực thể và nhà cung cấp xác thực tùy chỉnh, cùng một lúc là gì?

tập tin

phần có liên quan củasecurity.yml

encoders: 
    WordRot\PlayBundle\Entity\User: plaintext 

providers: 
    wordnik_users: 
     entity: { class: WordRotPlayBundle:User, property: username } 

firewalls: 
    wordnik_secured: 
     pattern: ^/play 
     logout: ~ 
     anonymous: ~ 
     # The next line specifies the custom authentication provider: 
     wordnik: true 
     form_login: 
      provider: wordnik_users 
      login_path: /login 
      check_path: /play_check 
      # on success 
      always_use_default_target_path: true 
      default_target_path: /play 

EDIT

This might prove useful. Đó là một diff trên cành bậc thầy ...

  • Từ khi các nhà cung cấp tùy chỉnh auth (WordnikProvider) vẫn bị hành quyết (a473d354)
  • Để gần đây nhất cam kết về chi nhánh tổng thể (ddcfeae2) , nơi nhà cung cấp auth không còn được thực thi nữa.

EDIT 2

Với điểm break tôi càng phát hiện ra:

  1. On đăng nhập dạng POST, WordnikProvider#supports đang được gọi với một UsernamePasswordToken, do đó trở false.
  2. Trên biểu mẫu đăng nhập POST, WordnikListener được xây dựng nhưng các phương pháp khác (attemptAuthentication, requiresAuthentication) không bao giờ được gọi. Chưa hết, WordnikFactory#createListener cũng không bao giờ được gọi! Thật ngạc nhiên khi người nghe được xây dựng.
  3. Tuy nhiên, trên login_check GET, WordnikListener#requiresAuthentication IS được gọi.
+1

Dịch vụ form_login giả định bạn cần mật khẩu. Vì vậy, làm cho mình một bộ mã hóa mà nói rằng không có mật khẩu là tốt. Điều đó sẽ giúp bạn có thêm một bước nữa. – Cerad

+0

Cerad, thực sự có vẻ như vấn đề đến từ UserAuthenticationProvider, là "Thông tin đăng nhập không hợp lệ". lỗi cho thấy. Mặc dù nó là một bí ẩn hoàn toàn đối với tôi tại sao nhà cung cấp đó đang được nạp! Tôi không nghĩ bộ mã hóa là vấn đề. –

+0

AuthProvider tải người dùng qua nhà cung cấp người dùng và sau đó xác thực người dùng bằng cách kiểm tra mật khẩu bằng bộ mã hóa. Nếu bạn không sử dụng dịch vụ form_login thì hãy lấy nó ra. Nhưng nó chắc chắn có vẻ như/play_check đang được xử lý bởi trình xử lý auth mặc định. – Cerad

Trả lời

1

Vì vậy, chúng tôi đã có một cuộc thảo luận dài về vấn đề này. Vấn đề cơ bản là các dịch vụ form_login đã can thiệp vào dịch vụ wodnik. Đã xóa form_login và mọi thứ bắt đầu hoạt động tốt hơn.

http://chat.stackoverflow.com/rooms/25251/discussion-between-montgomery-jean-and-cerad

+0

Bản sao đầy đủ ở đây, không dài như vậy: http://chat.stackoverflow.com/transcript/25251 –

Các vấn đề liên quan