我有一个非常奇怪的情况,我不明白。
我有一个使用Google和Facebook身份验证的MVC Web应用程序。用户通过身份验证后,会重定向到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%肯定用户尚未注册。我想这里有某种竞争条件。真的不知道。
任何帮助都会非常受欢迎!
答案 0 :(得分:0)
我无法弄清楚为什么会这样,但我最后使用支票查看用户是否已经注册,以及他是否登录了他。