2016-01-15 2 views
2

У меня проблема с идентификатором ASP.NET. В моем приложении, я хочу, чтобы добавить пользователей в таблице dbo.AspNetUsers, как только кто-то добавляет их к опросу с их почтовым адресом, например:ASP.NET Identity, Зарегистрировать вручную добавил пользователя, не удаляя его

var user = new ApplicationUser 
      { 
       UserName = model.Email, 
       Email = model.Email, 
       TwoFactorEnabled = false, 
       EmailConfirmed = false, 
       Registered = true 
      }; 
_dbContext.ApplicationUsers.Add(user); 
_dbContext.SaveChanges(); 

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

Я попытался вручную добавить hashedPassword к нему в базе данных, как это:

_dbContext.ApplicationUsers.FirstOrDefault(u => u.Email == model.Email).PasswordHash = 
       this.HashPassword(user, model.Password); 
_dbContext.SaveChanges(); 

Но тогда Логин не удалось, из-за внутренней ошибки сервера, из-за значения NULL в «System.Security .Claims.Claim..ctor (String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue) ".

Кто-нибудь знает, как решить проблему регистрации пользователя, который уже был добавлен вручную, не удаляя его?

Спасибо за ответы!

EDIT/РЕШЕНИЕ

Вот решение:

В качестве первого шага, просто создать пользователя с паролем по умолчанию, а затем, если он хочет зарегистрировать, удалить пароль и добавить пароль от RegisterModel, как это:

var result = await _userManager.CreateAsync(user, "DefaultPassword1."); 

await _userManager.RemovePasswordAsync(user); 
var result = await _userManager.AddPasswordAsync(user, model.Password); 
+1

Вы действительно должны использовать методы на [ 'UserManager'] (https://msdn.microsoft.com/en-us/library/dn613059 (V = vs.108) .aspx) для добавления/удаления/обновления записей в таблицах Identity ASP.NET. –

ответ

2

Если вы посмотрите в контроллере Manage, вы увидите все методы управления учетными записями пользователей. Например, чтобы добавить пароль, то нужно использовать

var result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword); 
+1

Если вы добавите пользователя вручную, они не будут иметь штамп безопасности, который (IIRC) заставляет этот метод генерировать исключение. [Этот ответ] (https://stackoverflow.com/a/29430025/1187982) на другой вопрос должен помочь вам создать штамп безопасности для пользователя. –

+0

Спасибо, я попробую ваши решения. – davidrue

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