Asp.net mvc Asp.net标识:User.Identity.GetUserId()始终为null,User.Identity.IsAuthenticated始终为false

Asp.net mvc Asp.net标识:User.Identity.GetUserId()始终为null,User.Identity.IsAuthenticated始终为false,asp.net-mvc,asp.net-mvc-5.2,Asp.net Mvc,Asp.net Mvc 5.2,请参见下面的我的代码: var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); switch (result) { case SignInStatus.Success: string UserId = User.Identity.GetUserId(); ret

请参见下面的我的代码:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
    case SignInStatus.Success:
        string UserId = User.Identity.GetUserId(); 
        return RedirectToAction("ClientDetails","Home");
    case SignInStatus.LockedOut:
        return View("Lockout");
    case SignInStatus.RequiresVerification:
        return RedirectToAction("SendCode", "Account", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
    case SignInStatus.Failure:
    default:
        ModelState.AddModelError("", "Invalid login attempt.");
        return View(model);
}

UserId
总是
null
User.Identity.IsAuthenticated
总是
false
。但是我可以查看需要身份验证的view
ClientDetails

我假设您的示例是来自AccountController.Login()方法的代码。我遇到了与您相同的问题,但发现在下一个请求之前不会填充用户对象。尝试以下方法:

case SignInStatus.Success:
    return RedirectToAction("DoWork", "Account");


public async Task<ActionResult> DoWork()
{
    //this works
    string UserId = User.Identity.GetUserId();
    //return to View or Redirect again
}
案例标志状态成功:
返回重定向到操作(“DoWork”、“Account”);
公共异步任务DoWork()
{
//这很有效
字符串UserId=User.Identity.GetUserId();
//再次返回查看或重定向
}
对于问题的“UserId始终为null”部分,您可以通过model.UserName查找用户:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
    case SignInStatus.Success:
        ApplicationUser user = UserManager.FindByName(model.UserName);
        string UserId = user.Id;
        // UserId is now populated
        return RedirectToAction("ClientDetails","Home");

等等。不确定您是否希望User.Identity.IsAuthenticated为true,或者这是否是一个观察-这不会改变这一部分。

在使用[Authorize]标记方法后与我一起工作
属性并在authorize标头中发送访问令牌,似乎需要访问令牌来识别用户

您是否为Windows auth设置了站点?@Daniel Sanchez No.阅读本文请先设置cookies我正在尝试做完全相同的事情。Nitin可能是正确的,但这个链接为我澄清了更多,它说“User.Identity.IsAuthenticated在调用FormsAuthentication.SetAuthCookie()后的下一个请求之前不会设置为true”(以防其他人出现同样的问题)。我也有同样的问题。我复制了样板代码,改动很少。当我运行样板登录操作时,一切都按预期进行。当我尝试我的复制动作时,我知道OP会发生什么。