Symfony 3.2 "security.firewall.map.context.main" has a dependency on a non-existent service ^my authentication handler^
fosuserbundle, php, symfony
Solution
Perhaps you may messed up on how the service have been defined in `services.yml`. Please check the spaces and the yml syntax.
Problem
On my personal Symfony 3.2 project (https://github.com/pc-magas/photoalbum) because I wanted to get a Json instead of redirecting based on http://www.webtipblog.com/adding-an-ajax-login-form-to-a-symfony-project/ I made the following authentication Manager: ``` <?php namespace AppBundle\Security; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\SecurityContextInterface; use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface; class AuthenticationHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface { private $router; private $session; /** * Constructor * * @author Joe Sexton <joe@webtipblog.com> * @param RouterInterface $router * @param Session $session */ public function __construct( RouterInterface $router, Session $session ) { $this->router = $router; $this->session = $session; } /** * onAuthenticationSuccess * * @author Joe Sexton <joe@webtipblog.com> * @param Request $request * @param TokenInterface $token * @return Response */ public function onAuthenticationSuccess( Request $request, TokenInterface $token ) { // if AJAX login if ( $request->isXmlHttpRequest() ) { $array = array( 'status' => true ); // data to return via JSON $response = new Response( json_encode( $array ) ); $response->headers->set( 'Content-Type', 'application/json' ); return $response; // if form login } else { if ( $this->session->get('_security.main.target_path' ) ) { $url = $this->session->get( '_security.main.target_path' ); } else { $url = $this->router->generate( 'home_page' ); } // end if return new RedirectResponse( $url ); } } /** * onAuthenticationFailure * * @author Joe Sexton <joe@webtipblog.com> * @param Request $request * @param AuthenticationException $exception * @return Response */ public function onAuthenticationFailure( Request $request, AuthenticationException $exception ) { // if AJAX login if ( $request->isXmlHttpRequest() ) { $array = array( 'status' => false, 'message' => $exception->getMessage() ); // data to return via JSON $response = new Response( json_encode( $array ) ); $response->headers->set( 'Content-Type', 'application/json' ); return $response; // if form login } else { // set authentication exception to session $request->getSession()->set(SecurityContextInterface::AUTHENTICATION_ERROR, $exception); return new RedirectResponse( $this->router->generate( 'login_route' ) ); } } } ``` And I configured my `services.yml` like this: ``` parameters: services: authentication_handler: class: AppBundle\Security\AuthenticationHandler public: false arguments: ["@router","@session"] ``` And I configured `security.yml` like that: ``` security: encoders: FOS\UserBundle\Model\UserInterface: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: fos_userbundle: id: fos_user.user_provider.username firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager check_path: security_check_route success_handler: authentication_handler failure_handler: authentication_handler logout: true anonymous: true access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, role: ROLE_ADMIN } ``` But I get the following Error: The service "security.firewall.map.context.main" has a dependency on a non-existent service "authentication_handler". Do you have any sort of idea how the prob will be solved? I have set the `authentication_handler` my service into `services.yml` file but I get the error mentioned above.