我正在使用以下操作在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()
返回null
,User.Identity.GetUserId<int>()
返回0
。
我做错了什么?
答案 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);
}