ExternalLoginConfirmation返回用户已存在

问题描述 投票:0回答:1

我有一个非常奇怪的情况,我不明白。

  1. 我有一个使用Google和Facebook身份验证的MVC Web应用程序。用户通过身份验证后,会重定向到ExternalLoginCallback操作以进行注册。
  2. 输入电子邮件地址后 - 用户使用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%肯定用户尚未注册。我想这里有某种竞争条件。不知道真的。

任何帮助将非常感激!

c# asp.net-mvc asp.net-mvc-4 oauth-2.0
1个回答
0
投票

我无法弄清楚为什么会发生这种情况,但我最后使用检查来查看用户是否已经注册,以及他是否登录了他。

© www.soinside.com 2019 - 2024. All rights reserved.