Asp.net mvc 为什么用户为空

Asp.net mvc 为什么用户为空,asp.net-mvc,login-script,Asp.net Mvc,Login Script,我想问一下,为什么用户登录后UserId为null(在下面的代码中) 或 我需要根据用户的角色重定向用户。我需要让它尽可能简单 // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) {

我想问一下,为什么用户登录后UserId为null(在下面的代码中)

我需要根据用户的角色重定向用户。我需要让它尽可能简单

// POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change to shouldLockout: true
        var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                string UserId = User.Identity.GetUserId(); <------ HERE
                HelpRoles hr = new HelpRoles();
                returnUrl = hr.CheckUserRoleAndRedirect(UserId);
                return RedirectToLocal(returnUrl);
//POST:/Account/Login
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
//这不会将登录失败计入帐户锁定
//要使密码失败触发帐户锁定,请更改为shouldLockout:true
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:

string UserId=User.Identity.GetUserId();用户对象是在请求经过身份验证后根据解密的cookie设置的,并且这些cookie直到下一个请求时才设置,因此需要在用户之前刷新页面。Identity不为null

欲了解更多信息


要解决此问题,在成功案例中,您可以使用电子邮件地址从数据库中获取用户,并在其上使用ID。

用户对象是在请求经过身份验证后根据解密的cookies设置的,并且这些cookies在下一个请求之前不会设置,因此需要在用户之前刷新页面。标识不可用嗯

欲了解更多信息


要解决此问题,在成功案例中,您可以使用电子邮件地址从数据库中获取用户,并在其上使用ID。

正如John Mc所说,要解决此问题,您必须在成功案例中获取用户。因此,在获取
用户ID

var user = userManager.Find(model.UserName, model.Password);

编辑

在这种情况下,您不必使用如下所示的方法
string UserId=User.Identity.GetUserId();
正如John Mc所说,要解决这个问题,您必须在成功案例中获得用户。因此,在获得
UserId之前,您可能需要这样的内容

var user = userManager.Find(model.UserName, model.Password);

编辑

在这种情况下,您不必使用如下所示的方法
string UserId=User.Identity.GetUserId();
var user = userManager.FindByName(model.Username);