AUTENTICAZIONE E AUTORIZZAZIONE
STRUTTURA DI UNA RAZOR PAGE
Una Razor Page offre un modo alternativo di veicolare dei contenuti ai nostri utenti, in esse ritroveremo i medesimi concetti che abbiamo incontrato in MVC. Vediamo la differenza strutturale tra MVC e Razor Page.
Ad esempio, se prendiamo il Form di registrazione abbiamo una View Register.cshtml, e un file Register.cshtml.cs dove si trovano Controller e Model. Iniziamo con l’analizzare la View. Fondamentalmente non ci sono grosse differenze con una View MVC, l’unica cosa da notare è la direttiva @page in cima alla vista.
La direttiva @page rende la Razor Page raggiungibile via web ad un certo indirizzo. Analizziamo la gerarchia di directory per capire questa direttiva. Areas è un contenitore speciale di ASP.NET Core che non influenza l’indirizzo. Identity che è il nome dell’Area influenza il percorso, tutti i contenuti all’interno di questa directory sono raggiungibile dal prefisso /Identity. Anche Pages è un contenitore speciale delle Razor Page che non influenza l’indirizzo. Account si è stata definita da Microsoft. Infine, abbiamo la Razor Page che non va presa per intero ma senza l’estensione.
Grazie alla direttiva @page la pagina di registrazione sarà raggiungibile dai nostri utenti all’indirizzo /Identity/Account/Register. Facciamo un esempio ancor più semplice.
Le Razor Page sono particolarmente utili quando dobbiamo veicolare del testo statico, in cui non c’è una logica dietro. Vediamo come è organizzato il file che definisce il Controller e il Model.
OnGetAsync è il metodo con verbo GET che viene chiamato per popolare la View Razor; quindi, può accedere ad esempio a un database e valorizzare l’InputModel. OnPostAsync è il metodo con verbo POST. Come vedi c’è una grossa somiglianza tra i metodi di un Controller nell’architettura MVC e nelle Razor Page.
AGGIUNGERE UN CAMPO ALLA RAZOR PAGE DI REGISTRAZIONE
Vediamo come aggiungere un campo FullName alla Razor page di registrazione. Modifichiamo innanzitutto l’InputModel in modo che accolga la proprietà FullName e poi la implementiamo nella Razor Page. Fin qui non ci sono grosse difficoltà anche perché abbiamo visto a proposito delle Razor Page che sarà il model binder a valorizzare questa nuova proprietà. Quello che dobbiamo fare è modificare il comportamento di default di Identity ed estendere IdentityUser.
ApplicationUser erediterà tutte le altre proprietà, quindi ci basta aggiungere la proprietà FullName. ApplicationUser verrà persistita grazie allo UserManager e i servizi infrastrutturali di Entity Framework Core; perciò, dovrà essere una classe nota al nostro DbContext. Andiamo all’interno di MyCourseDbContext e facciamolo ereditare da IdentityDbContext<ApplicationUser>. Applichiamo una Migrations, la ritrovi nella cartella Migrations in modo che la tabella AspNetUsers includa il campo FullName. Ora torniamo nella Razor Page e completiamo il lavoro sostituendo IdentityUser con ApplicationUser.
ACCEDERE AL PROFILO DELL’UTENTE E AGGIORNARLO CON LO USER MANAGER
Adesso come messaggio di benvenuto compare l’e-mail del nostro utente. Ora che abbiamo il nome completo vediamo come farlo comparire per accedere al profilo utente. Un utente, ad esempio, un autore non può essere rappresentato con un indirizzo e-mail. Dobbiamo andare nella View _LoginPartial.cshtml e modificare il suo comportamento. Prima vediamo come reperire il FullName.
Ora che sappiamo come recuperare il FullName vediamo la modifica alla vista.
Vediamo come persistere il profilo utente.
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