2012-04-16 1 views
5

Qual è il modo preferito di integrare un provider di appartenenza personalizzato con Orchard?Orchard CMS membership personalizzata

ho visto un paio di post attorno attuazione di un nuovo IMembershipService e IUserService (da Orchard.Users) e poi ci altri moduli come OpenAuthentication che sembrano fare un sacco più di questo (ma usa ancora l'UserPart? ?).

Abbiamo già un provider di appartenenze ASP.NET scritto, può essere integrato così com'è?

risposta

7

L'implementazione personalizzata di IMembershipService è un modo per andare se non si desidera utilizzare il modulo predefinito Orchard.Users. Utile quando si desidera eseguire l'autenticazione dei moduli, ma è sufficiente memorizzare i dati di autenticazione da qualche altra parte, non in UserPart.

Se si desidera creare uno schema di autenticazione completamente personalizzato, che sovrascrive quello predefinito basato su modulo (nome utente + password), sovrascrivere IAuthenticationService.

Quindi, in generale:

  • IMembershipProvider è circa la gestione dei dati di autenticazione (creare/recuperare gli utenti)
  • IAuthenticationProvider è su come eseguire l'autenticazione (sign in/out/ottenere ecc utente corrente)

A seconda delle esigenze è possibile ignorare uno o entrambi.

I moduli di autenticazione comuni, come quello di OpenAuth, aggiungono ulteriori opzioni di autenticazione a quella predefinita esistente senza realmente sostituirla, IIRC.

+3

Se si implementa IMembershipService utilizzando un archivio dati separato, da dove proviene la proprietà ContentItem per l'IUser restituito? – Oll

+0

Hmmm, bella domanda in realtà. 'IUser' deve essere un elemento di contenuto in modo che complichi un po 'le cose, ma solo un po'. È possibile creare un singolo oggetto di contenuto ("Utente" uno, ad esempio) senza parti e inserirne uno come valore della proprietà 'ContentItem' per ogni' IUser'. Se il collegamento di altre parti all'utente non è necessario nello scenario, funzionerà perfettamente. –

+0

Si potrebbe anche ad es. inserisci l'elemento di contenuto del sito corrente lì, quindi non dovrai creare nulla. Il sito attuale è accessibile tramite 'IOrchardServices.WorkContext.CurrentSite'. –