我有一个非常奇怪的情况,我不明白。
ExternalLoginCallback
操作以进行注册。ExternalLoginConfirmation
操作在系统中注册:
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
if (ModelState.IsValid)
{
// Get the information about the user from the external login provider
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
return View("ExternalLoginFailure", "_UnauthorizedLayout");
}
var firstName = GetUserClaim(info, ClaimTypes.GivenName);
var lastName = GetUserClaim(info, ClaimTypes.Surname);
var user = new ApplicationUser { UserName = model.Email,
FirstName = firstName,
LastName = lastName,
Email = model.Email };
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
// add login
result = await UserManager.AddLoginAsync(user.Id, info.Login);
if (result.Succeeded)
{
result = await AddUserClaims(user, info);
if (result.Succeeded)
{
await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
return RedirectToLocal(returnUrl);
}
}
}
AddErrors(result);
}
ViewBag.ReturnUrl = returnUrl;
return View("ExternalLoginConfirmation", "_UnauthorizedLayout", model);
这都非常标准。
问题是有些用户报告他们在使用facebook / google进行身份验证后尝试注册,并且他们收到错误消息称用户已经存在。这肯定不是真的,因为他们尝试过多个从未注册过的电子邮件。
我无法在我的电脑上重现这一点。我只能假设问题出在这一行
var result = await UserManager.CreateAsync(user);
返回用户存在错误。我100%肯定用户尚未注册。我想这里有某种竞争条件。不知道真的。
任何帮助将非常感激!
我无法弄清楚为什么会发生这种情况,但我最后使用检查来查看用户是否已经注册,以及他是否登录了他。