2017-12-06 17 views
0

내가 이해할 수없는 정말 기괴한 상황이 있습니다.ExternalLogin 확인 결과 사용자가 이미 존재 함

  1. Google 및 Facebook 인증을 사용하는 MVC 웹 앱이 있습니다. 사용자가 인증되면 등록을 위해 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 % 확신합니다. 여기에 어떤 종류의 경쟁 조건이 있다고 생각합니다. 정말 모르겠어요.

도움이 많이 필요합니다.

답변

0

왜 이런 일이 발생하는지 알 수 없지만 사용자가 이미 등록되어 있는지 확인하고 그 사람을 대신 로그인하는 것으로 끝났습니다.