2017-01-28 1 views
0

I가 다음 security.yml :Symfony 3로 테스트하기 위해 어떻게 사용자 제공자를 오버라이드합니까?

security: 

    # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded 
    providers: 
     in_memory: 
      memory: ~ 
     bd_provider: 
      entity: 
       class: AppBundle:Usuario 
       property: email 

    firewalls: 
     # disables authentication for assets and the profiler, adapt it according to your needs 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     main: 
      anonymous: ~ 

      form_login: 
       login_path: login 
       check_path: login 

      provider: bd_provider 

      logout: 
       path: /logout 
       target: /login 

그리고이 방법에 의해 시험 porpuses에 대한 인증 해요 :

protected function createClientWithAuthentication() 
{ 
    /* @var $client Client */ 
    $client = static::createClient(); 

    /* @var $user UserInterface */ 
    $user = $client->getContainer()->get('doctrine')->getRepository('AppBundle:Usuario')->find(5); 

    $firewallName = 'main'; 
    $token = new UsernamePasswordToken($user, $user->getPassword(), $firewallName, $user->getRoles()); 
    $session = $client->getContainer()->get('session'); 
    $session->set('_security_' . $firewallName, serialize($token)); 
    $session->save(); 

    $cookie = new Cookie($session->getName(), $session->getId()); 
    $client->getCookieJar()->set($cookie); 

    return $client; 
} 

하지만 in_memory 같은 테스트를위한 개의 다른 공급자를 사용하고 싶습니다 . 나는 것처럼

$user = new Usuario(); 
$user 
    ->setUsername('[email protected]') 
    ->setPassword('admin') 
    ->setRole('ROLE_USER_ADMIN'); 

시험은, 로그인 페이지로 보내 주 : 그래서 내 config_test.yml

security: 
    providers: 
     em_memoria: 
      memory: 
       users: 
        [email protected]: 
         password: senha 
         roles: 'ROLE_SUPER_ADMIN' 

    encoders: 
      AppBundle\Entity\Usuario: plaintext 

    firewalls: 
     main: 
      provider: em_memoria 

을에서 다음하지만 코드를 변경 때에 사용자를 조립하는 추가 잘못된 사용자를 사용합니다. 내가 여기서 무엇을 놓치고 있니? 내가해야 할 일이 더 있니?

기타 정보가 필요하다면 알려주세요. 여기에서 알려 드리겠습니다.

미리 감사드립니다.

답변

0

내가이 일을 만들 수 없습니다, 그래서 SQLite는 것으로 테스트 환경 내 데이터베이스를 구성 db. 또한 초기 데이터를로드하기 위해 DataFixtures를 만들고 bootstrap 파일에 theese fixtures를 호출했습니다. [심포니 \ 구성 요소 \ 의존성 주입 \ 예외 \의 InvalidArgumentException] 별칭을 대체 할 수 없습니다 "응용 프로그램 : 공급자의

0

별칭을 사용자 공급자로 사용하고 다른 환경에서 다른 서비스를 참조 할 수 있습니다.

firewalls: 
    main: 
     provider: app.user_provider 

conf.yml :

services: 
    app.user_provider: 
     alias: bd_provider 

conf_test.yml :

services: 
    app.user_provider: 
     alias: em_memoria 
+0

정의는 서비스의 정의, 그렇지 않으면 나는 다음과 같은 오류가 발생 동일한 파일에 있어야합니다 .user_provider "를 실제 정의"bd_provider "로 대체합니다. [Symfony \ Component \ DependencyInjection \ Exception \ ServiceNotFoundException] 존재하지 않는 서비스 "bd_provider"를 요청했습니다. –

+0

여기에서 일부 코드를 편집하고 다음을 수행했습니다. 클래스 TestUserProvider를 작성하고 사용자를 리턴하는 사용자 정의 제공자를 구현했습니다. 내 테스트 공급자가'providers '목록의 첫 번째 항목으로 지정되었지만 내 테스트에서 성공으로 실행되지만 더 이상 bd_provider를 사용할 수 없습니다. 내 기본 방화벽 아래에'provider '키를 지정해도 사용할 수 없습니다. . –

관련 문제