2016-12-14 3 views
0

Symfony에서 다른 사용자를 가장하려고 시도하고 있지만 다른 경우는 Symfony impersonation - separate firewalls and separate user providers 인 경우가 다른 경우가 아니라 호스트가 다른 경우입니다.symfony가 다른 호스트를 가장합니다.

firewalls: 
    admin: 
     pattern: ^/ 
     host: "%host_admin%" 
     provider: admin 
[...] 
     switch_user: 
     role: ROLE_ADMIN 
     provider: client 
     #host: "%host_public%" <-- tried this.. does not work 
     context: cmb_context 

    client: 
     pattern: ^/ 
     host: "%host_public%" 
     provider: client 
[...] 
     switch_user: 
     role: ROLE_ADMIN 
     provider: client 
     context: cmb_context 

그래서, 내가 사용자를 가장하려고 세트 업으로, 그것은 관리자 측에서 인증 할 수없는, 즉 제대로 포착되어있어, 클라이언트 관리자 사이트에 물론 남아있다. 물론 클라이언트로 이동할 때 auth 세션이 존재하지 않습니다.

나는 행운을 빌어 "어디에서"가장 할지를 알기 위해 시스템을 호스트하려고했습니다.

나는 http://symfony.com/doc/current/security/impersonating_user.html#events에 언급 된 청취자에게 넘어 져야 할지도 모르지만 그 방법에 대한 세부 정보를 찾지 못했습니다.

아이디어가 있으십니까? 미리 감사드립니다.

답변

0

chainUserProvider을 사용하면 하나 이상의 사용자 제공 업체를 함께 추가 할 수 있으므로 여러 소스에서 사용자를 가져올 수 있습니다. ChainUserProvider에 공급자를 추가하는 순서는 중요합니다. 즉, 사용자를 찾으면 해당 사용자의 자격 증명이 실패하더라도 해당 사용자를 확인합니다.

parameters: 
    chain_providers: "mydatabase1,mydatabase2" 

security: 
    providers: 
     mydatabase1: 
      entity: 
       class: My\UserBundle\Entity\Admin 
       property: username 

     mydatabase2: 
      entity: 
       class: My\UserBundle\Entity\Customer 
       property: username 

     my_chain: 
      chain: 
       providers: %chain_providers% 
+0

답장을 보내 주시면 감사하겠습니다. 내가 가지고있는 문제는 엔티티 데이터를 내 방화벽에서 가져 오지 못하는 것입니다. 페이지 하단의 symfony dev-bar에 올바른 사용자 이름이로드 된 것을 볼 수 있습니다 (다른 공용 엔티티 중 하나). 하지만 다른 호스트에있는이 동일한 엔티티로 로그인 할 수 있어야합니다 (처음에는 관리 호스트에 있고 클라이언트 호스트에 클라이언트로 로그인하고 싶습니다) ... – rrubiorr81