ASP.NET 身份,注册手动添加的用户而不删除他
本文关键字:用户 删除 添加 身份 NET 注册 ASP | 更新日期: 2023-09-27 18:30:31
我对 ASP.NET 身份有问题。在我的应用程序中,我想将用户添加到表 dbo。AspNetUsers,只要有人使用他们的邮件地址将他们添加到投票中,就像这样:
var user = new ApplicationUser
{
UserName = model.Email,
Email = model.Email,
TwoFactorEnabled = false,
EmailConfirmed = false,
Registered = true
};
_dbContext.ApplicationUsers.Add(user);
_dbContext.SaveChanges();
如果之前像这样添加到数据库中的人想用他的邮件地址注册自己,我不想删除手动添加的用户并将他注册为新用户,因为其他关系已经与他的 ID 相关,约束不允许这样做。我也无法删除连接的关系,因为其他用户也与他们相关。
我尝试在数据库中手动向他添加一个哈希密码,如下所示:
_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)"。
是否有人知道在不删除他的情况下注册已手动添加的用户的解决方案?
感谢您的回答!
编辑/解决方案
这是解决方案:
第一步,只需使用默认密码创建用户,然后如果他想要注册,请删除密码并从 RegisterModel 中添加密码,如下所示:
var result = await _userManager.CreateAsync(user, "DefaultPassword1.");
await _userManager.RemovePasswordAsync(user);
var result = await _userManager.AddPasswordAsync(user, model.Password);
如果您查看Manage
控制器,您将看到管理用户帐户的所有方法。例如,添加您将使用的密码
var result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);