Ciao a tutti,
@alvaropetro:
Per quanto riguarda la soluzione "PortableAuthentication" probabilmente la tua versione di VS non la supporta (anche se in teoria dovrebbe, ma non so esattamente quale sia per poterlo dare per certo), in ogni caso non è importante quel progetto, puoi semplicemente escluderlo dalla soluzione posizionandoti su esso e cliccando con il tasto destro, dopo scegli elimina (la cancella) o escludi dal progetto.
Per la libreria (l'altro errore) in realtà è anche un po colpa mia che non ho impostato come "copia localmente" la dll, questo perché nel pc nella quale ho sviluppato la soluzione ho installato i RIA service, quindi uso la copia locale. Puoi provare a cercare la libreria (System.ServiceModel.DomainServices.Hosting) tramite google, oppure se non dovessi trovarla appena possibile (forse più tardi) posso passartela direttamente. In ogni caso è possibile che incontri altre librerie (assembly) mancanti. Ti chiedo scusa per la dimenticanza. Altra soluzione sarebbe scaricare ed installare i RIA service nel pc. una volta ottenuta la dll fai tasto destro sulla cartella riferimenti (nel progetto interessato che in questo caso è quello "web") e scegli aggiungi riferimento (fallo per tutte quelle che hanno un simbolo di attenzione), poi scegli sfoglia e carichi la dll che hai scaricato. Se lo fai tu da solo sarebbe già un ottimo allenamento, se non dovessi riuscire potrei anche ri-postare tutta la soluzione compresa di librerie mancanti. P.S. per creare il primo utente vedi sotto.
@dcube:
in realtà il database è "vergine", quindi al momento non ci sono utenti. una possibile soluzione potrebbe essere quella di aggiungerlo tramite SQL Management studio (usa la connessione che trovi nel file config, ovvero: ".\SQLEXPRESS;Database=AutLib;Trusted_Connection=true;" quindi istanza ".SQLEXPRESS", database "AutLib" oppure il nome che preferisci dargli nel config) oppure tramite VS (in esplora server aggiungi una connessione al db).
Diversamente puoi aggiungere il codice seguente dentro la classe "Authentication" del progetto WEB.Entities :
protected override bool ValidateUser(string username, string password)
{
using (Model.Context context = new Model.Context())
{
context.Utenti.Add(new Model.Utente() { Name = "quelloCheVuoi", Password = "quellaCheVuoi",Nome="quelloCheVuoi",Cognome="quelloCheVuoi" });
context.SaveChanges();
}
return true;
}
In pratica è un override che ti consente di aggiungere l'utente direttamente dal servizio di autenticazione quando chiamato a fare login. Puoi decidere se lasciarlo (in quel caso ti conviene mettere "return base.ValidateUser(username,password);", se no autorizzi tutti sempre se lasci true) ed utilizzarlo come "inizializzatore" (quando il db è "vergine"), oppure cancellare tutto il metodo dopo il primo utilizzo. Ovviamente se lo lasci fai in modo di controllare e farlo girare solo se non esistono altri utenti, diversamente scarti (oppure lo aggiungi solo se digiti utente e password uguali a quelli scritti nel codice, insomma vedi tu).
P.S.
Qualora siate interessati ad utilizzare il metodo con l'override per creare un utente di default, attualmente andrete a riscontrare un errore di login al primo "giro", questo perché in realtà il contesto è già caricato nella classe base, quindi dopo l'aggiunta non vede l'utente appena creato, la conseguenza è che dovreste fare una seconda chiamata per vederlo, oppure cambiate il codice postato sopra in questo modo :
protected override bool ValidateUser(string username, string password)
{
Model.Context context = (Model.Context)base._context;
context.Utenti.Add(new Model.Utente() { Name = "quelloCheVuoi2", Password = "quellaCheVuoi2" });
context.SaveChanges();
return base.ValidateUser(username,password);
}
In questo modo andate ad aggiungere l'utente alla stessa istanza creata nella base (quindi non una nuova come nel codice sopra), quindi non avete problemi neanche al primo login. Ma siccome la proprietà _context non è protected ma private, dalla classe derivata non "avreste" modo di accedere, quindi dovrete andare nel file AuthenticationBase.cs del progetto Authentication, e nella classe Authentication<TContext,Tuser> troverete questo :
IAuthenticationContext _context;
come vedete è "private" (non c'è scritto ma è di default se non diversamente specificato), quindi dovete aggiungere il modificatore "protected", quindi diventa :
protected IAuthenticationContext _context;
Il protected serve a poter far accedere ad un det. membro dalla classe derivata, diversamente non sarebbe accessibile da quest'ultima.
Bene, nel caso non conoscevate già l'utilità del protected, beh... mi pare un buon esempio per capire quando e perché usarlo. ;) inoltre avete l'opportunità di prendere confidenza anche con questa parte di codice.
Modificato da u235 il 30 ottobre 2014 21.44 -