2016-01-31 1 views
2

Kinda застрял в том, как это произошло, но в настоящее время я включил внешний логин Google и Facebook в мой чистый проект MVC5.VS2015 MVC5 Шаблон по умолчанию, управляет ошибкой внешнего входа?

Все отлично работает, когда вы входите с помощью внешнего входа, но при попытке связать аккаунт с Manage/ManageLogins и нажмите на любую из кнопок 2, я получаю эту ошибку

Error Screen

не модифицировали код помимо добавления интеграции Google/Facebook, следуя учебники по ASP.NET

по умолчанию код из ManageController если кто-то заинтересован

// 
    // GET: /Manage/ManageLogins 
    public async Task<ActionResult> ManageLogins(ManageMessageId? message) 
    { 
     ViewBag.StatusMessage = 
      message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed." 
      : message == ManageMessageId.Error ? "An error has occurred." 
      : ""; 
     var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); 
     if (user == null) 
     { 
      return View("Error"); 
     } 
     var userLogins = await UserManager.GetLoginsAsync(User.Identity.GetUserId()); 
     var otherLogins = AuthenticationManager.GetExternalAuthenticationTypes().Where(auth => userLogins.All(ul => auth.AuthenticationType != ul.LoginProvider)).ToList(); 
     ViewBag.ShowRemoveButton = user.PasswordHash != null || userLogins.Count > 1; 
     return View(new ManageLoginsViewModel 
     { 
      CurrentLogins = userLogins, 
      OtherLogins = otherLogins 
     }); 
    } 

    // 
    // POST: /Manage/LinkLogin 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult LinkLogin(string provider) 
    { 
     // Request a redirect to the external login provider to link a login for the current user 
     return new AccountController.ChallengeResult(provider, Url.Action("LinkLoginCallback", "Manage"), User.Identity.GetUserId()); 
    } 

    // 
    // GET: /Manage/LinkLoginCallback 
    public async Task<ActionResult> LinkLoginCallback() 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId()); 
     if (loginInfo == null) 
     { 
      return RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error }); 
     } 
     var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login); 
     return result.Succeeded ? RedirectToAction("ManageLogins") : RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error }); 
    } 

ответ

0

K Я узнал, в чем проблема после отладки, поставив точку останова в последней строке LinkLoginCallBack(), вы можете увидеть глубину ошибки результата. Для меня это было связано с тем, что учетная запись OAuth, которую я зарегистрировал, уже привязана к ApplicationUser

Надеюсь, это поможет всем, кто имеет ту же проблему