1.509 messaggi dal 27 dicembre 2005
Ottimo articolo solo due domande.
Public Class EmailService
Implements IIdentityMessageService

Public Function SendAsync(message As IdentityMessage) As Task Implements IIdentityMessageService.SendAsync
' Inserire qui la parte di codice del servizio di posta elettronica per l'invio di un messaggio.
Return Task.FromResult(0)
End Function
End Class

Questi dobbiamo implementarli noi ?

inoltre per abilitare la conferma account, dove va messo questo codice ?

string code = await UserManager
.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Conferma account",
"Per confermare l'account, fare clic <a href=\"" + callbackUrl + "\">qui</a>");
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, l'implementazione dei servizi di spedizione dobbiamo farla noi. Nel caso dell'EmailService è abbastanza semplice perché possiamo usare la classe SmtpClient che già conosciamo bene. Il testo, l'oggetto e il destinatario della mail vengono passati come proprietà dell'IdentityMessage che arriva come argomento, quindi sono subito pronti da usare. Guarda per esempio come è stato implementato in questo articolo (giusto l'ultimo blocco di codice è importante).

Invece, il codice per la conferma dell'account dovresti metterlo nell'action (o nella pagina aspx) che riceve il form di registrazione dell'utente.
  • L'utente apre il form di registrazione, compila i campi e clicca "Registra"
  • Dall'action, verifichi che i dati siano validi e crei l'utente con UserManager.CreateAsync
  • Subito sotto, nella stessa action, metti quel codice per generare il link ed inviarlo all'utente via email. Lo puoi vedere anche nel template di Visual Studio 2013 per applicazioni ASP.NET MVC, si trova nell'action Register (quella invocata via POST) dell'AccountController.
A proposito del template, hanno avuto l'accortezza di mettere dei link alla documentazione, per spiegare come abilitare le varie funzioni. Qui trovi quello relativo alla conferma dell'account.
http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity

ciao e grazie :)

Enjoy learning and just keep making
190 messaggi dal 09 novembre 2005
Domandona, ma come faccio a definire in fase progettazione della mia website i ruoli che ho deciso di gestire?
Devo per forza mettere in piedi dei controller per gestirmi i ruoli?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, se gestire ruoli e utenti in produzione è uno dei requisiti dell'applicazione, allora sì, dovresti creare i tuoi controller. Ma prima valuta il codice che trovi in questo repository GitHub (attualmente è in beta2), è un identity manager completo.
Thinktecture.IdentityManager
Puoi usarlo come sostituto del classico "ASP.NET Configuration site" che avevamo nelle precedenti versioni di Visual Studio.

Oppure, se ti interessa semplicemente aggiungere una manciata di ruoli che difficilmente cambieranno, allora potresti inserirli nel database dal metodo Seed del tuo database initializer.
  • Usando l'approccio code-first, puoi fare in modo che il tuo database venga creato grazie ad un initializer
  • Il metodo Seed dell'initializer prepopola il db con i tuoi ruoli
  • Il db può iniziare a ricevere query e comandi

ciao, Moreno

Enjoy learning and just keep making
190 messaggi dal 09 novembre 2005
Grazie mille!
Sei stato di grande aiuto.
2 messaggi dal 24 febbraio 2013
Buongiorno,
è possibile utilizzare Identity da un'applicazione Console, ad esempio per creare una serie massiva di utente,
aventi tutte la stessa password di default, in modo tale da evitarne la creazione, una per volta ?
Eventualmente potresti postare qualche esempio di utilizzo ?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, sì è possibile.
Di questi pacchetti, dovresti installare il Core e volendo anche EntityFramework, se è questo il meccanismo di persistenza che hai deciso di usare.

In questo caso, supponendo che il tuo utente sia identificato dalla classe User (che deriva da IdentityUser) e supponendo di avere un DbContext che deriva da IdentityDbContext<User>, faresti:

//Qui la lista degli utenti costruiscila tu, ad esempio leggendo da un file di testo
//che riporta tutti gli username di utenti da creare.
List<User> utentiDaCreare = LeggiElencoUtentiDaCreare();

            using (var ctx = new TuoContext("tuaconnectionstring"))
            using (var userStore = new UserStore<User>(ctx))
            using (var manager = new UserManager<User>(userStore))
            {
                foreach (var utente in utentiDaCreare)
                {
                    manager.Create(user: utente, password: "default");
                }
            }

Qui ho usato la classe UserManager che inserisce l'utente con l'hash della passwowrd che hai fornito (le passwod NON vengono salvate in chiaro). A proposito dell'hashing: non sono sicuro se poi l'applicazione web produrrà un hash identico. Se hai errore in fase di login, potrebbe essere necessario implementare un tuo password hasher personalizzato che produce hash secondo una tua logica indipendente dal tipo di applicazione.
Oppure, molto più facile, fai l'importazione massiva direttamente dall'applicazione web. Lo lanci come task in background grazie ad HangFire, che è ideale per tutte le attività di lunga durata.

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.