2012-06-05 2 views
0

Symfony \ Component \ Security \ Core \ Authentication \ AuthenticationProviderManager의 authenticate() 함수에 몇 가지 코드를 추가하고 싶습니다.symfony2가 security.authentication.manager 서비스를 덮어 씁니다.

보안 번들의 하위 번들을 만들려고했습니다. 그리고 난 그

<!-- Authentication related services --> 
    <service id="security.authentication.manager" class="%security.authentication.manager.class%" public="false"> 
     <argument type="collection" /> 
    </service> 

처럼이 번들에 security.authentication.manager에 대한 서비스를 재정의하지만 페이지를 relad 때, 프레임 워크가 예외를 던질 : InvalidArgumentException을 : 당신은 적어도 하나 개의 인증 공급자를 추가해야합니다.

부모 번들 구성 내에서 의존성이 생성 된 것으로 가정합니다.

전체 보안 번들을 재정의하지 않고 작동 시키려면 어떻게해야합니까? 감사합니다.

답변

0

좋아, 내가 가장 좋은 방법은

그리고 내가 만들어야합니다 symfony2의 formFactory를 확장 내 자신의 공장을 만들 것을 발견 내 DaoAuthenticationProvider를 확장하고 추상 서비스로 선언하는 자체 AuthentificationProvider.

그런 다음 createAuthProvider() 메소드를 통해 팩토리에서 서비스를 만들고 필요한 매개 변수를 바꿉니다. 나는 사용자가 내가 외부 API 및 테스트 자격 증명을 호출해야합니다. 로그인하기 전에 몇 가지 확인해야 할 사실

protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId) 
{ 
    $provider = 'acme.authentication.provider.dao.'.$id; 
    $container 
     ->setDefinition($provider, new DefinitionDecorator('acme.authentication.provider.dao')) 
     ->replaceArgument(0, new Reference($userProviderId))//replace args on the service constructor 
     ->replaceArgument(2, $id) 
     ->addArgument(new Reference('acme.api'))//add some args to the service constructor 
    ; 

    return $provider; 
} 
0

나는 당신 자신의 핸들러가 더 잘 만들어 졌을 것이라고 생각한다.

  1. 당신은
  2. serviceservice container로 등록 만들어야합니다. 당신의 security.yml에서
  3. 간단히 세트 핸들러 :
form_login: 
    success_handler: success_login_handler 
    failure_handler: failure_login_handler 
logout: 
    success_handler: success_logout_handler 
+0

는, 다음의 경우 사용자 계정은 내가 권한을 부여 할 수 있습니다 (외부 API와 로컬 데이터베이스에) 존재 사용자에 대한 액세스. – Rmannn

+0

로컬 DB에서 사용자를로드하는 경우 ['EntityRepository']에서 해당 작업을 수행 할 수 있습니까? (http://symfony.com/doc/current/cookbook/security/entity_provider.html#authenticating-someone-with-a-custom -entity-provider)? – jkucharovic

+0

이것이 문제입니다. 사실 저는 로그인 양식을 사용하여 api에서 먼저 사용자를 (db가 아닌) 찾을 수 있도록 검색하고 외부 로그인이 사용자를 반환하면 DB와 동기화합니다. 그런 이유로 인증 방법()에서 사용자 정의 테스트를 추가 할 수는 없지만 실제로 SecurityBundle을 올바르게 재정의하는 방법을 모르겠습니다. – Rmannn

관련 문제