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
Selettore CSS :has() e i suoi casi d'uso avanzati
Gestione CSS in Blazor con .NET 9
Generare velocemente pagine CRUD in Blazor con QuickGrid
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Le novità di Angular: i miglioramenti alla CLI
Migrare una service connection a workload identity federation in Azure DevOps
Utilizzare Copilot con Azure Cosmos DB
Ordine e importanza per @layer in CSS
Utilizzare l nesting nativo dei CSS
Recuperare App Service cancellati su Azure
Utilizzare una qualunque lista per i parametri di tipo params in C#
Migliorare l'organizzazione delle risorse con Azure Policy