Tôi đang gặp sự cố khi xác thực để hoạt động nhưng nó chỉ xuất hiện trong các trường hợp rất cụ thể. Việc xác thực được thực hiện thông qua API của bên thứ ba, vì vậy tôi đã viết lớp nhà cung cấp người dùng của riêng mình và bên trong lớp đó là một số mã đồng bộ hóa dữ liệu giữa API và Symfony, như một phần của quá trình đồng bộ hóa đó xác định vai trò người dùng nên có. Sau khi thực hiện điều này, nó thiết lập mối quan hệ giữa vai trò và người dùng thông qua mối quan hệ ManyToMany. Phương thức getRoles() trong đối tượng User của tôi lấy các đối tượng vai trò ra khỏi cơ sở dữ liệu và biến nó thành một chuỗi các chuỗi, tên vai trò đến từ cơ sở dữ liệu của tôi và tất cả bắt đầu bằng ROLE_.Xác thực không thành công trong Symfony2
Nếu tôi đăng nhập bằng tài khoản không có thêm vai trò nào thì nó hoạt động tốt, nhưng nếu tôi đăng nhập vào tài khoản có vai trò tôi vừa được gửi trở lại màn hình đăng nhập mà không có thông báo lỗi.
Tôi đã kiểm tra các bản ghi và nhìn thấy những mục này:
security.INFO: User "[email protected]" has been authenticated successfully [] []
event.DEBUG: Notified event "security.interactive_login" to listener "Pogo\MyBundle\Listener\LoginListener::onSecurityInteractivelogin". [] []
event.DEBUG: Listener "Symfony\Component\Security\Http\Firewall::onKernelRequest" stopped propagation of the event "kernel.request". [] []
event.DEBUG: Listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener" was not called for event "kernel.request". [] []
event.DEBUG: Listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener" was not called for event "kernel.request". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse". [] []
security.DEBUG: Write SecurityContext in the session [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\SecurityBundle\EventListener\ResponseListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bridge\Monolog\Handler\FirePHPHandler::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\CacheListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". [] []
event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest". [] []
event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". [] []
event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
security.INFO: Populated SecurityContext with an anonymous Token [] []
event.DEBUG: Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall\ExceptionListener::onKernelException". [] []
security.DEBUG: Access denied (user is not fully authenticated); redirecting to authentication entry point [] []
security.DEBUG: Calling Authentication entry point [] []
Tôi không hiểu làm thế nào nó có thể được chứng thực ở phía trên, sau đó ngay khi nó kiểm tra các bức tường lửa mà nó tìm thấy chính nó với một thẻ vô danh đó là lý do tại sao nó có lẽ sẽ gửi tôi trở lại màn hình đăng nhập.
thiết lập tường lửa/access_control của tôi là:
firewalls:
public:
pattern: /.*
anonymous: true
tessitura_login:
login_path: /account/login
check_path: /secure/login_check
logout:
path: /secure/logout
target:/
access_control:
- { path: ^/secure/.*, role: ROLE_USER }
- { path: ^/admin.*, role: ROLE_ADMIN }
- { path: ^/account/login/?, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
Bất kỳ sự giúp đỡ với điều này sẽ được ồ ạt đánh giá cao, tôi đã dành một vài giờ trên này ngay bây giờ và tôi hoàn toàn bối rối.
Tôi không cho rằng bạn đã tìm thấy câu trả lời cho vấn đề của mình? – Clint
Xin lỗi Clint, có lẽ hơi muộn cho bạn nhưng nó hóa ra là trường phiên quá nhỏ. Mã đã lưu trữ khá nhiều đối tượng Doctrine trong phiên không phù hợp với trường cơ sở dữ liệu gây ra lỗi này – pogo