Как разрешить пользователю регистрироваться с повторяющимся именем пользователя с помощью Identity Framework 1.0C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешить пользователю регистрироваться с повторяющимся именем пользователя с помощью Identity Framework 1.0

Сообщение Anonymous »

Я хочу разработать приложение в MVC с использованием Identity Framework 1.0, которое позволит пользователям регистрироваться под тем же именем пользователя, которое используется другим пользователем.

При удалении пользователя, которого я хочу чтобы установить для пользовательского свойства IsDeleted значение true вместо удаления пользователя из базы данных. В этом случае другой пользователь может использовать имя пользователя пользователя, для которого IsDeleted установлено значение true.

Но по умолчанию UserManager.CreateAsync(user , пароль); метод предотвращает это.

Я переопределил метод ValidateEntity IdentityDbContext вот так

Код: Выделить всё

protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary items)
{
if ((entityEntry != null) && (entityEntry.State == EntityState.Added))
{
ApplicationUser user = entityEntry.Entity as ApplicationUser;
if ((user != null) && this.Users.Any(u => string.Equals(u.UserName, user.UserName) && u.IsDeleted==false))
{
return new DbEntityValidationResult(entityEntry, new List()) {
ValidationErrors = {
new DbValidationError("User", string.Format(CultureInfo.CurrentCulture,
"", new object[] { user.UserName }))
}
};
}
IdentityRole role = entityEntry.Entity as IdentityRole;
if ((role != null) && this.Roles.Any(r => string.Equals(r.Name, role.Name)))
{
return new DbEntityValidationResult(entityEntry, new List()) {
ValidationErrors = {
new DbValidationError("Role", string.Format(CultureInfo.CurrentCulture,
"", new object[] { role.Name })) } };
}
}
return base.ValidateEntity(entityEntry, items);
}
Вот мой метод регистрации, при котором создается пользователь

Код: Выделить всё

public async Task Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email.ToLower(), CreatedBy = model.UserName, CreatedDate = DateTime.UtcNow, };

user.ConfirmedEmail = false;
var result = await _accountService.CreateAsync(user, model.Password);
if (result.Succeeded)
{

TempData["MessageConfirm"] = user.Email;
return RedirectToAction("Confirm", "Account");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}

Код: Выделить всё

ValidateEntityМетод 
должен выполняться при выполнении await _accountService.CreateAsync(user, model.Password);. Но он выполняется после того, как метод Register завершает свое выполнение. Таким образом, результат выдает ошибку.

Есть предложения, как этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/290 ... ramework-1
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»