ExternalLoginConfirmation返回用户已存在
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExternalLoginConfirmation返回用户已存在相关的知识,希望对你有一定的参考价值。
我有一个非常奇怪的情况,我不明白。
- 我有一个使用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%肯定用户尚未注册。我想这里有某种竞争条件。不知道真的。
任何帮助将非常感激!
答案
我无法弄清楚为什么会发生这种情况,但我最后使用检查来查看用户是否已经注册,以及他是否登录了他。
以上是关于ExternalLoginConfirmation返回用户已存在的主要内容,如果未能解决你的问题,请参考以下文章