使用ExternalLoginCallback进行身份验证如何获取UserId和UserName ASP.NET MVC5

时间:2016-02-07 10:53:56

标签: authentication asp.net-mvc-5 owin

我正在使用以下操作在ASP.NET MVC5中进行非常基本的登录:

public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
    string mid = ExtractMid(returnUrl);

    var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
    if (loginInfo == null)
    {
        if (mid == null)
        {
            return RedirectToAction("Login");
        }
        else
        {
            return RedirectToAction("MobileLoginFailure");
        }
    }

    // Sign in the user with this external login provider if the user already has a login
    var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
    switch (result)
    {
        case SignInStatus.Success:
            if (mid != null)
            {
                return redirectMobile(mid, User.Identity.GetUserName(), User.Identity.GetUserId<int>());
            }
            else
            {
                return RedirectToLocal(returnUrl);
            }
        case SignInStatus.Failure:
        default:
            return View("ExternalLoginConfirmation");
    }
}

我希望在SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);之后用户将登录,以便:redirectMobile(mid, User.Identity.GetUserName(), User.Identity.GetUserId<int>());我将能够获取用户的ID和用户名。 但这种情况并非如此! User.Identity.GetUserName()返回nullUser.Identity.GetUserId<int>()返回0

我做错了什么?

1 个答案:

答案 0 :(得分:3)

我不能说我知道发生了什么。但是,我确实找到了满足我需求的解决方案。

我补充说:

var user = await UserManager.FindByEmailAsync(loginInfo.Email);

并使用了我需要的信息。为了完整 -

        case SignInStatus.Success:
            if (mid != null)
            {
                var user = await UserManager.FindByEmailAsync(loginInfo.Email);
                if (user == null)
                {
                    return RedirectToAction("MobileLoginFailure");
                }
                else
                {
                    return redirectMobile(mid, user.UserName, user.Id);
                }
            }
            else
            {
                return RedirectToLocal(returnUrl);
            }
相关问题