VS2015 MVC5默认模板,管理外部登录错误?

时间:2016-01-31 11:10:55

标签: asp.net-mvc facebook oauth google-oauth2

有点坚持这是怎么回事,但我目前已经启用Google和Facebook外部登录我的清洁MVC5项目。

当您使用外部登录登录时,一切正常,但当您尝试从Manage/ManageLogins链接帐户并点击其中任意一个按钮时,我收到此错误

Error Screen

Haven修改了除ASP.NET之后添加Google / Facebook集成的任何代码

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

1 个答案:

答案 0 :(得分:0)

K我发现调试后问题是什么,通过在LinkLoginCallBack()的最后一行放置一个断点,你可以深入地看到结果错误。对我来说,这是因为我登录的OAuth帐户已经绑定到ApplicationUser

希望这有助于其他有同样问题的人