2010-01-24 17 views
7

Ho implementato l'autenticazione personalizzata in ASP.NET MVC. Se un utente valido tenta di accedere, imposto lo HttpContext.User = user nel metodo di accesso di AccountController. Ma rimane lì solo per che richiede. Come posso impostarlo per la sessione?Impostare HttpContext.User per la sessione

Ho usato un'alternativa, impostare HttpContext.Session["CurrentUser"] = user. Se voglio vedere se la sessione è autorizzata, dovrei controllare che lo HttpContext.User != null. Ma, non voglio esporre la logica di autenticazione ovunque nell'applicazione. Se dovessi cambiarlo, sarebbe disordinato.

Per favore aiutami a risolvere questo. Una soluzione potrebbe essere il popolamento della proprietà HttpContext.User di ogni richiesta con il valore di HttpContext.Session["CurrentUser"] all'inizio, ma non so come farlo.

risposta

11

scrivere il seguente metodo nella classe di applicazione del Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    HttpContext.Current.User = HttpContext.Session["CurrentUser"]; 
} 

oppure è possibile utilizzare la proprietà "Utente" di System.Web.Mvc.Controller che viene ereditato per i controller (nota: essere sicuri chiamare il metodo FormsAuthentication.SetAuthCookie quando si convalida correttamente il login dell'utente).

+0

Qual è l'equivalente per questo in '.Net Core'? –

+0

Ho anche bloccato lo stesso problema in .net core. Sto provando da molti giorni ma non ho trovato alcuna soluzione autentica. Per favore fatemi sapere se trovate qualche soluzione. – Saif

6

Il modo migliore per farlo è scrivere un modulo di autenticazione personalizzato e collegarlo all'applicazione. Questo modulo verrà eseguito prima di qualsiasi richiesta e avrà la possibilità di impostare la proprietà HttpContext.User come appropriato.

Ad esempio, considerare il modulo Autenticazione moduli. Prima che il gestore HTTP venga eseguito (sia esso una pagina .aspx, la pipeline MVC, ecc.), Ha la possibilità di intercettare la richiesta. Legge il valore di un cookie di accesso, decrittografa e verifica il valore del cookie crittografato e imposta HttpContext.User se i controlli passano. In questo modo, quando il gestore esegue e effettivamente elabora la richiesta, la proprietà User è già stata impostata correttamente.

Alla fine, come sarà questo è che non è necessario un attributo di autorizzazione personalizzato su ASP.NET, poiché l'attributo [Autorizza] già fornito in-box dovrebbe funzionare automaticamente con il modulo di autenticazione personalizzato. Tuttavia, il tuo metodo AccountController.LogOn() (o qualsiasi altra cosa tu usi al posto di questo) dovrà comunicare con il fornitore di autenticazione appropriato che genera il token che verrà convalidato dal modulo di autenticazione. Questo dovrebbe essere l'unico posto in cui avresti bisogno di scrivere codice diverso da quello che viene fornito in-box.

Vedere http://social.msdn.microsoft.com/Search/en-US?query=http%20modules e http://social.msdn.microsoft.com/Search/en-US?query=custom%20authentication%20asp.net per ulteriori informazioni.

Problemi correlati