Ok, quindi questo sembra un bisogno comune. Un po 'googling trova molti modi per farlo. Sono interessato al modo più "mvc corretto" per farlo.Come inizializzare le informazioni sull'autorizzazione
Ho, nell'angolo in alto a destra della mia app, un saluto che dice Hello FirstName LastName
. Ora, è abbastanza facile ottenere il nome utente dell'utente che ha effettuato l'accesso, tramite lo IPrincipal
(ovvero User.Identity.Name
). Tuttavia, questo non mi darà il nome e il cognome dell'utente. Devo colpire l'API Membership per ottenere quello.
Il colpire l'API Membership ha i suoi svantaggi. Colpisce il database ogni volta, aggiungendo un ulteriore accesso db a ogni pagina servita. È abbastanza facile impostare alcune variabili di sessione all'accesso, ma questo funziona solo per quella sessione. Se l'utente fa clic su "Ricordami", non verrà eseguito il login la volta successiva e devo ancora caricare questi valori.
- Potrei creare il mio provider di appartenenza per fare un po 'di cache, ma questo è un sacco di lavoro per uno scopo più o meno singolo.
- Potrei usare
Application_AuthenticateRequest
e premere l'API di appartenenza e memorizzare i valori nelle variabili di sessione, o qualcosa di simile. Questo è ok, ma sembra una piccola forza bruta. - Potrei registrare un filtro globale e gestire OnAuthenticate, essenzialmente facendo la stessa cosa. Questo sembra un po 'meglio, ma qui sono insolito delle ramificazioni.
- Potrei derivare un controller di base e aggiungere similmente le proprietà per fornire queste informazioni. Sembra un po '"vecchia scuola", e odio dover fare una lezione base per un unico scopo.
- Potrei creare un metodo statico di cache che otterrebbe le informazioni al primo accesso. Questo non è molto meglio di un singleton.
- Potrei anche creare il mio IPrincipal, ma questo significa lanciarlo ogni volta per ottenere i dati, e questo sembra goffo. Potrei avvolgerlo in un'altra classe per semplificarlo, ma comunque ...
- Potrei memorizzare i dati nel cookie di autenticazione dei moduli e ottenerli da lì. Ci sono alcuni strumenti disponibili per renderlo più facile.
Ci sono metodi che non ho pensato? E qual è il modo più "corretto in mvc" per farlo?
domanda molto importante anche per me. –