2014-02-02 5 views
7

Используя asp.net mvc5, мои системы управления пользователями, похоже, работают. Я могу войти в Google или с именем/паролем.Как удалить пользователей, созданных с помощью UserManager.CreateAsync

, но теперь я работаю над интерфейсом управления пользователями, в котором мне нужно иметь возможность удалять существующих пользователей. И это начинает рассказывать мне, насколько запутанная система управления пользователями. Существует так много разных способов общения с пользователями .. и некоторые из них не работают.

Всюду, где я читал, речь идет об использовании членства.DeleteUser().

Но это не работает ...

Пользователей были созданы с.

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

Теперь позже .. как удалить такого пользователя? (с учетом его имени или идентификатора пользователя)

Я пробовал то, что больше всего подходит для различных поисков .. Входит в состав как членство. Но это наверняка не подходит для MVC5? Например

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

я могу получить все пользователи, использующие этот метод ..

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

И я могу найти конкретного пользователя с ..

Теперь, как я могу удалить один, хотя? ....

+2

http://stackoverflow.com/ вопросы/19466222/whys-delete-not-supported-in-asp-net-identity –

+0

Ох ... работающий, как ожидалось, тогда .. в этой версии. –

+0

Таким образом, UserStore, вероятно, верный способ сделать это, затем ... позже, когда он будет реализован. Что-то вроде. var um = new UserManager (новый UserStore (db)); var us = new UserStore (db); UserUser user = um.FindById (model.userId); us.DeleteAsync (пользователь); –

ответ

15

Update

По Microsoft.AspNet.Identity версии 2.0.0.0, теперь вы можете удалить пользователей с помощью Идентичность UserManager.Delete(user);.


потомству

Вы имеете в виду две разные вещи, Идентичность и членство. Новые версии поддержки ASP.NET Identity и Membership with Identity являются стандартными, а более старые версии поддерживают только членство (из этих двух систем аутентификации).

Когда вы создаете пользователя с UserManager.CreateAsync, вы делаете это в пространстве имен Microsoft.AspNet.Identity. Когда вы пытаетесь удалить пользователя с Membership.DeleteUser, вы делаете это в пространстве имен System.Web.Security. Они живут в двух разных мирах.

В другом комментарии упоминается, deleting users is not yet supported out of the box by Identity, но это is the first item on their roadmap for a Spring of 2014 release.

Но зачем ждать?Добавить еще одно свойство модели ApplicationUser так:

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

Затем в контроллере для удаления пользователя:

user.IsActive = false; 

Выполните проверку при входе пользователя в систему:

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

Когда удаленный пользователь попытается перерегистрироваться, вместо UserManager.Create используйте UserManager.Update с их новой информацией на странице регистрации.

Эти шаги будут эффективно удалить пользователя. Если вы действительно должны очистить свою информацию из своей базы данных, you can use Entity Framework to do that more directly.

3

добавлен в предыдущий отклик. Если у вас есть

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

Затем в контроллере для удаления пользователя:

user.IsActive = false.ToString(); 

, потому что ваш тип данных является строкой и п Ot булево

Смежные вопросы