AUTENTICAZIONE E AUTORIZZAZIONE
AGGIUNGERE UN CLAIM PERSONALIZZATO PER EVITARE CHIAMATE AL DATABASE
Nei casi in cui l’applicazione venga fruita da molti utenti contemporaneamente ci sono tecniche alternative nell’inviare query alla tabella AspNetUsers. Vediamo dove possiamo aggiungere un claim per ricavare il FullName. Questo perché il FullName lo ricaviamo dallo UserManager<TUser> e ogni volta che ci spostiamo nelle pagine dell’applicazione viene fatta una query al database. Ci può essere un piccolo decadimento delle prestazioni se l’applicazione è fruita da molti utenti contemporaneamente.
Aggiungiamo nel cookie di autenticazione anche il FullName che, una volta autenticato l’utente con la pagina di login, viaggerà insieme alle richieste nell’applicazione. Vediamo la classe da cui derivare.
Questo è il codice.
ACCEDERE AI CLAIM DELL’UTENTE CON IL SERVIZIO IHTTP CONTEXT ACCESSOR
Vediamo come accedere ai claim nei servizi.
CREARE UNA RELAZIONE CON APPLICATION USER
Creiamo una relazione tra AspNetUsers e Courses. Questo ci sarà molto utile quando dovremo determinare se l’utente corrente ha il diritto o meno di modificare un certo corso. Aggiungiamo una nuova colonna nella tabella Courses AuthorId chiave esterna che punta al campo Id di AspNetUsers. La relazione è uno-a-molti un autore può creare molti corsi.
Su AuthorId mettiamo il vincolo di chiave esterna è una relazione uno a molti, un autore può creare più corsi, infatti, ci possono essere n entry su tale colonna valorizzati con L’Id della tabella AspNetUsers come già detto.
INVIARE UN’EMAIL PER LA CONFERMA DELLA REGISTRAZIONE
Anche per inviare un’e-mail l’architettura di Identity ci viene incontro, quello che dobbiamo fare noi è creare un servizio infrastrutturale che ci consente, appoggiandoci alle interfacce di Identity, di creare il codice per l’invio. L’interfaccia di registrazione si presta un po’ ad abusi, questo perché se l’utente fosse malintenzionato potrebbe indicare una e-mail non sua.
Il Form di registrazione invia una mail all’indirizzo specificato, fino a che l’utente non lo conferma facendo click sul link l’account risulta bloccato, non utilizzabile. Il link rimanda all’applicazione e solo dopo averlo cliccato avviene la conferma della e-mail e l’utente facendo il login ottiene il cookie di autenticazione.
Il Client di posta scelto è Mail Kit, un progetto open source disponibile su GitHub.
USARE ADO.NET CON IDENTITY
Usare Entity Framework Core non è l’unica soluzione possibile, Identity è modulare e debolmente accoppiato con una particolare implementazione.
Quello che faremo per implementare ADO.NET è la sostituzione dei servizi infrastrutturali.
AdoNetUserStore fa da ponte tra lo UserManager<TUser> e il nostro SqliteDatabaseAccessor.
LINK AL CODICE SU GITHUB
Scaricare il codice della sezione17 oppure il ramo master o clonare il repository GITHUB per avere a disposizione tutte le sezioni nel tuo editor preferito. Consulta il file README.md per reperire user e password per inviare e-mail con mailtrap.io. Inoltre devi reperire i codici per implementare il ReCaptcha. Sotto ti riporto un’immagine dal sito di Google.
Scrivi un commento