Uno dei maggiori pregi di ASP.NET Identity 2 è la possibilità di personalizzarne praticamente ogni aspetto, sia per quanto riguarda le policy di sicurezza (abbiamo visto un paio di esempi negli ultimi script), sia sugli aspetti di storage e di memorizzazione dei dati di profilo.
A differenza di quanto avveniva con il vecchio MembershipProvider, in cui eravamo costretti a usare la classe MembershipUser, in ASP.NET Identity possiamo utilizzare un qualsiasi oggetto per rappresentare il nostro utente, purché implementi l'interfaccia IUser
public interface IUser<out TKey> { TKey Id { get; } string UserName { get; set; } }
Nella maggior parte dei casi, però, conviene ereditare dalla classe IdentityUser, che espone già una serie di proprietà basilari, come la lista dei claim e dei ruoli dell'utente. Se creiamo un nuovo progetto ASP.NET MVC da Visual Studio, possiamo notare che questo è proprio l'approccio utilizzato per definire la classe ApplicationUser.
public class ApplicationUser : IdentityUser { ... }
Questo è il posto dove possiamo aggiungere dati personalizzati di profilo. Per esempio, immaginiamo di dover tener traccia della data di nascita dell'utente. Ci è sufficiente aggiungere la corrispondente proprietà a questa classe e il gioco è fatto:
public class ApplicationUser : IdentityUser { public DateTime? BirthDate { get; set; } }
Visto che lo strato di persistenza è gestito da Entity Framework Code First, la nostra modifica è immediatamente funzionante e ci basterà valorizzare questa proprietà per memorizzarla sul database.
Se vogliamo recuperare l'utente corrente per conoscere quale sia la sua data di nascita, dobbiamo avvalerci dello UserManager:
// using necessaria per GetUserManager using Microsoft.AspNet.Identity.Owin; public class HomeController : Controller { public async Task<ActionResult> Index() { if (this.User.Identity.IsAuthenticated) { var userManager = HttpContext.GetOwinContex() .GetUserManager<ApplicationUserManager>(); var user = await userManager .FindByNameAsync(this.User.Identity.Name); var birthDate = user.BirthDate; } return View(); } }
Nella action precedente, abbiamo istanziato l'ApplicationUserManager dal contesto Owin, tramite il metodo GetUserManager (attenzione a includere il namespace indicato in alto). Successivamente è sufficiente invocare FindByNameAsync per recuperare lo user, per esempio tramite il suo nome, e accedere alla proprietà che abbiamo definito.
Per memorizzarla, invece, abbiamo a disposizione il metodo UpdateAsync:
var user = await userManager.FindByNameAsync(this.User.Identity.Name); user.BirthDate = new DateTime(1977, 7, 10); await userManager.UpdateAsync(user);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il trigger SQL con le Azure Function
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Ordinare randomicamente una lista in C#
Hosting di componenti WebAssembly in un'applicazione Blazor static
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Generare token per autenicarsi sulle API di GitHub
Gestione degli stili CSS con le regole @layer
Ottimizzazione dei block template in Angular 17
Creare una libreria CSS universale: Clip-path
Paginare i risultati con QuickGrid in Blazor
Disabilitare automaticamente un workflow di GitHub (parte 2)
Creare gruppi di client per Event Grid MQTT