ASP.NET Core Identity 2 usermanager CreateAsync 似乎永远不会完成
ASP.NET Core Identity 2 usermanager CreateAsync never seems to finish
我正在为我的 ASP.NET Core 2 项目使用 Identity。虽然我对它有点满意,因为我发现了更多关于它的信息,但我 运行 遇到了一个问题,我似乎无法弄清楚这里出了什么问题。代码如下所示:
public class UserNewViewModel
{
public UserNewViewModel()
{
}
public UserNewViewModel(Domain.User user)
{
NormalizedEmail = user.NormalizedEmail;
UserName = user.UserName;
Password = string.Empty;
Email = user.Email;
FirstName = user.FirstName;
LastName = user.LastName;
}
public string NormalizedEmail { get; set; }
public string UserName { get; set; }
/*[Required]
[MinLength(8)]*/
public string Password { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public string Disabled { get; set; }
}
被送入:
[HttpPost]
//[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> RegisterUser(ViewModels.UserNewViewModel model)
{
if (ModelState.IsValid)
{
if(string.IsNullOrEmpty(model.UserName))
{
model.UserName = model.Email;
}
var existingUser = _BygBookDataContext.Users.FirstOrDefault(u => u.NormalizedEmail.Equals(model.NormalizedEmail));
if(existingUser == null)
{
existingUser = new Domain.User(){
UserName = model.UserName,
Email = model.Email
};
var result = await _userManager.CreateAsync(existingUser, model.Password);
if(result.Success)
{
}
}
else
{
existingUser.UserName = model.UserName;
existingUser.FirstName = model.FirstName;
existingUser.LastName = model.LastName;
existingUser.Email = model.Email;
await _userManager.UpdateAsync(existingUser);
_BygBookDataContext.SaveChanges();
if(!string.IsNullOrEmpty(model.Password))
{
var pwToken = await _userManager.GeneratePasswordResetTokenAsync(existingUser);
await _userManager.ResetPasswordAsync(existingUser, pwToken, model.Password);
_BygBookDataContext.SaveChanges();
}
}
return PartialView("UserNewPartial", existingUser);
}
// If we got this far, something failed, redisplay form
return PartialView(model);
}
就我而言,罪魁祸首是这一行:
await _userManager.CreateAsync(existingUser, model.Password);
我不知道哪里出了问题。我尝试在我的代码的其他地方做类似的事情:
await userMan.CreateAsync(new Domain.User{
UserName = "teknik@bygbook.dk",
Email = "teknik@bygbook.dk",
FirstName ="Teknik",
LastName = string.Empty,
EmailConfirmed = true
},
adminPassword);
所以我正在考虑问题是否可能是 existingUser 是通过从数据库加载它来初始化的,但这似乎不太可能,因为 EF 很难跟踪空值。
谁能告诉我这里出了什么问题?
编辑:即使将它放入变量并在 if(result.success)
处设置断点,它也永远不会在那里中断,它似乎只是在等待 createAsync
好吧,像个白痴一样,我没有检查 model.Password
是否真的有值。它没有。我仍然想知道为什么 userManager.CreateAsync(user, null)
没有抛出异常或给出任何错误或任何东西,但你去吧。
缺陷是我的输入,基本上是 <input type="password" name="Email" />
所以当我将属性值设置为 'password' 时,它就像一个魅力。抱歉占用您的时间。
我正在为我的 ASP.NET Core 2 项目使用 Identity。虽然我对它有点满意,因为我发现了更多关于它的信息,但我 运行 遇到了一个问题,我似乎无法弄清楚这里出了什么问题。代码如下所示:
public class UserNewViewModel
{
public UserNewViewModel()
{
}
public UserNewViewModel(Domain.User user)
{
NormalizedEmail = user.NormalizedEmail;
UserName = user.UserName;
Password = string.Empty;
Email = user.Email;
FirstName = user.FirstName;
LastName = user.LastName;
}
public string NormalizedEmail { get; set; }
public string UserName { get; set; }
/*[Required]
[MinLength(8)]*/
public string Password { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public string Disabled { get; set; }
}
被送入:
[HttpPost]
//[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> RegisterUser(ViewModels.UserNewViewModel model)
{
if (ModelState.IsValid)
{
if(string.IsNullOrEmpty(model.UserName))
{
model.UserName = model.Email;
}
var existingUser = _BygBookDataContext.Users.FirstOrDefault(u => u.NormalizedEmail.Equals(model.NormalizedEmail));
if(existingUser == null)
{
existingUser = new Domain.User(){
UserName = model.UserName,
Email = model.Email
};
var result = await _userManager.CreateAsync(existingUser, model.Password);
if(result.Success)
{
}
}
else
{
existingUser.UserName = model.UserName;
existingUser.FirstName = model.FirstName;
existingUser.LastName = model.LastName;
existingUser.Email = model.Email;
await _userManager.UpdateAsync(existingUser);
_BygBookDataContext.SaveChanges();
if(!string.IsNullOrEmpty(model.Password))
{
var pwToken = await _userManager.GeneratePasswordResetTokenAsync(existingUser);
await _userManager.ResetPasswordAsync(existingUser, pwToken, model.Password);
_BygBookDataContext.SaveChanges();
}
}
return PartialView("UserNewPartial", existingUser);
}
// If we got this far, something failed, redisplay form
return PartialView(model);
}
就我而言,罪魁祸首是这一行:
await _userManager.CreateAsync(existingUser, model.Password);
我不知道哪里出了问题。我尝试在我的代码的其他地方做类似的事情:
await userMan.CreateAsync(new Domain.User{
UserName = "teknik@bygbook.dk",
Email = "teknik@bygbook.dk",
FirstName ="Teknik",
LastName = string.Empty,
EmailConfirmed = true
},
adminPassword);
所以我正在考虑问题是否可能是 existingUser 是通过从数据库加载它来初始化的,但这似乎不太可能,因为 EF 很难跟踪空值。
谁能告诉我这里出了什么问题?
编辑:即使将它放入变量并在 if(result.success)
处设置断点,它也永远不会在那里中断,它似乎只是在等待 createAsync
好吧,像个白痴一样,我没有检查 model.Password
是否真的有值。它没有。我仍然想知道为什么 userManager.CreateAsync(user, null)
没有抛出异常或给出任何错误或任何东西,但你去吧。
缺陷是我的输入,基本上是 <input type="password" name="Email" />
所以当我将属性值设置为 'password' 时,它就像一个魅力。抱歉占用您的时间。