2012-08-15 8 views
10

Quando un utente ha già effettuato l'accesso, il componente Sicurezza continua a ricaricare i dati dal provider dell'utente a ogni reqyest. c'è un modo per evitarlo? Quando il tuo provider non si trova in un database locale, ad esempio in un servizio web, questo può rallentare notevolmente il sistema.Sicurezza Symfony 2: continua a ricaricare i dati dal provider dell'utente?

su ogni richiesta ottengo questo:

[2012-08-15 20:07:30] security.DEBUG: Read SecurityContext from the session [] [] 
[2012-08-15 20:07:30] security.DEBUG: Reloading user from user provider. [] [] 
+1

Gli utenti vengono aggiornati chiamando UserProvider :: refreshUser. Quindi potresti estendere il fornitore del sistema e cambiare refreshUser per non fare nulla o magari aggiungere qualche logica di temporizzazione. Questo è quello che faccio. Un po 'curioso di vedere se c'è un modo migliore. – Cerad

+0

refreshUser() viene chiamato su ogni richiesta? Inoltre, cosa fai? Hai appena restituito nulla su di esso? – vinnylinux

+0

Sì e sì. Naturalmente spetta a te ricaricare l'utente se le loro informazioni cambiano. – Cerad

risposta

6

Si può decidere castrato o di non aggiornare il vostro utente per ogni richiesta a seconda delle tue esigenze override del metodo del UserProviderInterface realizzazione refreshUser si basano su di una data contesto di sicurezza.

Si prega di fare riferimento alla seguente documentazione API:

UserProviderInterface.html#method_refreshUser

Spetta alla realizzazione di decidere se i dati utente dovrebbero essere completamente ricaricato (ad esempio dal database), o se il L'oggetto UserInterface può essere unificato in un array interno di mappa utente/identità .

+0

Non comprometterebbe la sicurezza? – vinnylinux

+0

Dipende dalla frequenza con cui i dati degli utenti devono essere aggiornati (e di conseguenza aggiornati) durante l'accesso. –

+1

http://api.symfony.com/2.7/Symfony/Component/Security/Core/ utente/UserProviderInterface.html # method_refreshUser –