Come eliminare utenti creati con UserManager.CreateAsync

Utilizzando asp.net mvc5, i miei sistemi di gestione degli utenti sembrano funzionare. Posso accedere con google o con nome / password ..

ma ora sto lavorando a un’interfaccia di gestione utente in cui devo essere in grado di eliminare utenti esistenti. E questo sta iniziando a rivelarmi quanto sia confuso il sistema di gestione degli utenti. Ci sono tanti modi diversi di trattare con gli utenti … e alcuni di loro non funzionano.

Quasi ovunque io legga, si tratta dell’utilizzo di Membership.DeleteUser ().

Ma non sta funzionando …

Gli utenti sono stati creati con.

var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email, ConfirmationToken = confirmationToken, IsConfirmed = false }; var result = await UserManager.CreateAsync(user, model.Password); 

Ora più avanti .. come faccio a cancellare un utente del genere? (dato il suo nome o userid)

Ho provato ciò che viene più visualizzato su varie ricerche. Si presenta come Membership come soluzione. Ma questo sicuramente non è giusto per MVC5? Per esempio

 var allusers = Membership.GetAllUsers(); // allusers is empty bool success = Membership.DeleteUser(model.name); // <-- success = false 

Posso ottenere tutti gli utenti usando questo metodo ..

 ApplicationDbContext db = new ApplicationDbContext(); foreach (var user in db.Users) { ... } 

E posso trovare un singolo utente con ..

 ApplicationDbContext db = new ApplicationDbContext(); var um = new UserManager(new UserStore(db)); ApplicationUser user = um.FindById(model.userId); 

Ora come faccio a eliminarne uno? ….

Aggiornare

A partire da Microsoft.AspNet.Identity versione 2.0.0.0, è ora ansible eliminare utenti con Identity utilizzando UserManager.Delete(user); .


Per i posteri

Ti stai riferendo a due cose diverse, Id quadro e appartenenza. Le versioni più recenti di ASP.NET supportano l’id quadro e l’appartenenza all’id quadro come predefinite, mentre le versioni precedenti supportano solo l’appartenenza (fuori da questi due sistemi di autenticazione).

Quando si crea un utente con UserManager.CreateAsync , lo si fa all’interno dello spazio dei nomi Microsoft.AspNet.Identity . Quando si tenta di eliminare un utente con Membership.DeleteUser , lo si fa all’interno dello spazio dei nomi System.Web.Security . Stanno vivendo in due mondi diversi.

Come un altro commento menziona, l’ eliminazione degli utenti non è ancora supportata immediatamente da Identity , ma è il primo elemento sulla loro roadmap per una versione Spring del 2014 .

Ma perché aspettare? Aggiungi un’altra proprietà al modello ApplicationUser in questo modo:

 public class ApplicationUser : IdentityUser { public string IsActive { get; set; } } 

Quindi, nel tuo controller per l’eliminazione di un utente:

 user.IsActive = false; 

Fai un controllo quando l’utente effettua il login:

 if (user.IsActive == false) { ModelState.AddModelError(String.Empty, "That user has been deleted."); return View(model); } 

Quando un utente eliminato tenta di registrarsi nuovamente, anziché UserManager.Create , utilizzare UserManager.Update con le nuove informazioni nella pagina di registrazione.

Questi passaggi elimineranno effettivamente l’utente. Se è veramente necessario cancellare le proprie informazioni dal database, è ansible utilizzare Entity Framework per farlo più direttamente .

aggiunto alla risposta precedente. Se hai

 public class ApplicationUser : IdentityUser { public string IsActive { get; set; } } 

Quindi, nel tuo controller per l’eliminazione di un utente:

 user.IsActive = false.ToString(); 

perché il tuo tipo di dati è una stringa e non un booleano