2017-12-06 16 views
0

私は理解できない本当に奇妙な状況があります。ExternalLogin確認の返信ユーザーが既に存在します

  1. 私は、GoogleとFacebookの認証を持つMVC Webアプリケーションを持っています。ユーザーが認証されると、登録のためにExternalLoginCallbackアクションにリダイレクトされます。これはすべてのかなり標準です

    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); 
    

:ユーザーがExternalLoginConfirmationアクションを使用して、システムに登録されている - 電子メールアドレスを入力した後

  • 問題は、一部のユーザーがfacebook/googleを使用して認証した後に登録しようとしていると報告し、ユーザーが既に存在しているというエラーが表示されることです。これは決して登録されていない複数の電子メールで試してみたものです。

    私は自分のコンピュータでこれを再現することはできませんでした。私は唯一の問題は、この行に

    エラーが存在するユーザーを返す

    var result = await UserManager.CreateAsync(user);

    であると想定できます。私はユーザーがまだ登録されていないと100%肯定的です。私はここに何らかの競争状態があると思います。本当にいい考えはありません。

    どのようなヘルプが多くのappriciatedでしょう!

  • 答えて

    0

    なぜこのようなことが起こっているのかわかりませんでしたが、ユーザーが既に登録されているかどうかを確認して、代わりにログインしていました。

    関連する問題