내가 이해할 수없는 정말 기괴한 상황이 있습니다.ExternalLogin 확인 결과 사용자가 이미 존재 함
Google 및 Facebook 인증을 사용하는 MVC 웹 앱이 있습니다. 사용자가 인증되면 등록을 위해
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 % 확신합니다. 여기에 어떤 종류의 경쟁 조건이 있다고 생각합니다. 정말 모르겠어요.
도움이 많이 필요합니다.