Hvordan kan jeg få brukerobjektet fra en tjeneste i Symfony2

stemmer
7

Mitt nettsted er å bruke en tredjeparts tjeneste for autentisering samt andre biter av funksjonalitet slik at jeg har setup en tjeneste som gjør alle API-kall for meg, og det er denne tjenesten som jeg trenger for å kunne få tilgang til brukerobjektet. Jeg har prøvd å injisere security.context tjenesten inn i min API service, men jeg får en ServiceCircularReferenceException fordi min brukerautentisering leverandør referanser API-tjenesten (det må for å autentisere brukeren). Så jeg får en kjede av

security.context -> authentication provider -> 
user provider -> API service -> security.context

Jeg sliter med å dette av en annen måte å få brukerobjektet, og jeg kan ikke se noen åpenbar måte å splitte opp denne kjeden.

Mine configs er alle definert i config.yml, her er de relevante biter

myapp.database:
    class: Pogo\MyAppBundle\Service\DatabaseService
    arguments:
        siteid: %siteid%
        entityManager: @doctrine.orm.entity_manager
myapp.apiservice:
    class: Pogo\MyAppBundle\Service\TicketingService
    arguments:
        entityManager: @myapp.database
myapp.user_provider:
    class: Pogo\MyAppBundle\Service\APIUserProvider
    arguments:
        entityManager: @myapp.database
        ticketingAdapter: @myapp.apiservice
        securityContext: @security.context
myapp.authenticationprovider:
    class: Pogo\MyAppBundle\Service\APIAuthenticationProvider
    arguments:
        userChecker: @security.user_checker
        encoderFactory: @security.encoder_factory
        userProvider: @myapp.user_provider

myapp.user_provider er tjenesten som jeg har definert som min bruker leverandør tjeneste i security.yml som jeg antar er hvordan det blir referert av security.context

Publisert på 17/06/2011 klokken 15:36
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Den security.contexttjenesten har for mange oppgaver. Dette er grunnen til at det ble foreldet i Symfony 2,6 og to nye tjenester fant sin plass; security.token_storageog security.authorization_checker. Oppdatering kan løse noen av hodepine.

Les mer her: http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

Og kveldsdestinasjon: Hvorfor brukeren leverandør trenger en sikkerhetskontekst? En UserProvider bør bare laste en bruker av sin brukernavn. Ingenting mer ... Les mer om tilpassede brukerleverandører her: http://symfony.com/doc/current/cookbook/security/custom_provider.html

Svarte 29/12/2014 kl. 08:50
kilden bruker

stemmer
0

Jeg fant en midlertidig løsning, men det er ikke veldig kosher. Du kan injisere hele @service_containertil tjenesten og bruker bare security.contextfra det. Men må du sette hele beholderen som klasse eiendom. Hvis du tar bare sikkerhetskontekst i konstruktør, vil det fortsatt kaste deg sirkelreferanse unntak.

Svarte 15/10/2011 kl. 13:07
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more