117 messaggi dal 12 febbraio 2016
Ciao a tutti,
rieccomi con le mie domande!
Vorrei aggiungere in un sito web già sviluppato e on line l'autenticazione di aspnet identity.
Ho letto tantissimi siti web su come procedere ma purtroppo non ci sono ancora riuscito.
Per adesso in maniera da poter capire come procedere sto utilizzando un progetto vuoto (MVC 4.5), ma sono fermo all'aggiunta delle tre librerie.
Avete qualche tutorial da suggerire con un procedimento passo passo?

Ciao
Piero
11.857 messaggi dal 09 febbraio 2002
Contributi
Ciao,
questo *potrebbe* esserti utile, anche se è riferito ad un progetto ASP.NET WebForms.
https://docs.microsoft.com/it-it/aspnet/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project
Dovrai adattare il codice che lì viene usato nelle WebForm e inserirlo all'interno di controller e view razor.

In alternativa puoi semplicemente creare un nuovo progetto MVC con Identity già installato (seleziona l'autenticazione per "Individual user account") e vedere cosa è stato fatto lì e riportarlo nel tuo progetto.

ciao,
Moreno

Enjoy learning and just keep making
117 messaggi dal 12 febbraio 2016
Buongiorno,
per adesso inizio con il tuo primo suggerimento perché vorrei capire per bene il suo funzionamento.
Ho provato già a guardare l'esempio da un nuovo progetto MVC ma trovo tanto codice e ho difficoltà a comprendere ogni riga di codice.

Giacché vorrei capire una cosa: nel mio sito web ho creato una classe che deriva da DbContext per i vari Dbset.
ora, per asp.net identity vedo una classe ApplicationDbContext che deriva da IdentityDbContext<ApplicationUser>.
Posso usare una sola per avere un unico Context sia per identity che per gli altri dbset? O devo avere le due classi?
11.857 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Posso usare una sola per avere un unico Context sia per identity che per gli altri dbset?

Assolutamente sì, tieni solo la classe che deriva da IdentityDbContext<ApplicationUser>. Al suo interno, copiaci i DbSet e il mapping che avevi nell'altra classe derivante da DbContext, e che poi potrai eliminare.

ciao,
Moreno

Enjoy learning and just keep making
117 messaggi dal 12 febbraio 2016
Quindi per fare un piccolo esempio:
 public ActionResult Index()
        {
            // lista delle categorie
            List<CategoriaVM> categorie;

            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                categorie = db.Categorie?.
            }
            return View(categorie);
        }

va bene questo procedimento?

Per un progetto MVC ho seguito anche questo tutorial presente su youtube che condivido in caso possa servire a qualcuno: https://www.youtube.com/watch?v=Gf26XD3vdrk.

Nel video si nota che viene creata una classe "Customer" derivata da IdentityUser
(in realtà la classe Customer è derivata dalla classe ApplicationUser che a sua volta è derivata dalla classe IdentityUser), con l'aggiunta di alcune proprietà:
public class Customer: ApplicationUser
    {
        public string nome { get; set; }
        public string cognome { get; set; }
        public string age { get; set; }

        public string country { get; set; }
    }


Una volta avviata l'applicazione, dopo la registrazione dell'utente, le proprietà aggiunte nella classe Customer vengono aggiunte come colonne della tabella AspNetUsers.

In questo modo posso gestire le varie proprietà del profilo utente?
Grazie
11.857 messaggi dal 09 febbraio 2002
Contributi
Ciao,


va bene questo procedimento?

Per il momento diciamo di sì.
In futuro potresti migliorarlo ricevendo un'istanza dell'ApplicationDbContext grazie alla dependency injection, anziché crearla tu stesso con la parola chiave new.
Ancora meglio sarebbe usare l'ApplicationDbContext da un servizio applicativo, cioè da un'altra classe che ti permetta di riutilizzare la logica e le query LINQ. Infatti, nelle action dovrebbe esserci meno codice possibile: giusto quello che serve a ricevere l'input dell'utente e a invocare un metodo esposto dal servizio applicativo.


In questo modo posso gestire le varie proprietà del profilo utente?

Assolutamente sì. Se ti funziona, va bene così come hai fatto.

In alternativa si può rinominare la classe ApplicationUser in Customer, se preferisci dargli questo nome. Infatti non deve obbligatoriamente chiamarsi "ApplicationUser". Se decidi di rinominarla, porta il cursore sul nome e usa CTRL+R CTRL+R. In questo modo verranno rinominate tutti i suoi riferimenti in giro per il progetto.

Così non sarebbe stato necessario creare un'ulteriore classe Customer che deriva da ApplicationUser che deriva da IdentityUser.

ciao,
Moreno

Enjoy learning and just keep making
117 messaggi dal 12 febbraio 2016
Ciao Moreno,
seguendo i tutorial e anche i tuoi suggerimenti sono riuscito ad implementare la registrazione, login e la gestione dei ruoli (quest'ultimo grazie ad un tuo articolo) con asp.net Identity.

Sto avendo però un errore cercando di ottenere la lista degli utenti.
Questo è il codice che utilizzo:

 var lista = UserManager.Users.ToList();



L'eccezione che ottengo è Invalid column name 'Discriminator'.

Certo, io utilizzo la classe Utente che estende IdentityUser.
Come posso ottenere l'elenco degli utenti registrati?
11.857 messaggi dal 09 febbraio 2002
Contributi
Ciao,
puoi far vedere il codice che hai usato per il mapping di Utente?
La proprietà UserManager.Users di che tipo risulta essere se ci porti il mouse sopra?

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.