无效登录后,显示null引用异常



这是我的控制器代码:

  public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        var user = await UserManager.FindByEmailAsync(model.Email);
        if (user != null)
        {
            if (!await UserManager.IsEmailConfirmedAsync(user.Id))
            {
                ViewBag.Email = user.Email;
                return View("UnconfirmedAccount");
            }
        }
 // Error is showing at this line System.nullReferenceException
        var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);
        switch (result)
        {
            case SignInStatus.Success:
                return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("", "Invalid login attempt.");
                return View(model);
        }
    }

我用电子邮件和密码登录用户。如果登录id和密码正确,则SignInStatus.成功案例调用成功。但是,如果登录失败,则显示系统。NullRefernceException。

现在,最重要的是,我已经在注册时成功地分离了用户名和电子邮件。现在,在注册时,我将电子邮件和用户名保存在各自的栏中。之前的电子邮件也保存在用户名栏中。但在分离用户名和电子邮件后,我无法登录,所以我不得不将登录操作方法中的这一行更改为:

var result = await SignInManager.PasswordSignInAsync(user.Email, model.Password, model.RememberMe, shouldLockout: false);

到此:

var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);

我只想显示无效的登录尝试消息,因为它显示之前,而不是这个黄色屏幕。如何做到这一点。

简单,从UserManager中找到用户后,您正在检查user是否为空

    var user = await UserManager.FindByEmailAsync(model.Email);
    if (user != null)
    {
        ....
    }

再次,您使用的用户对象在检查之外

var result = await SignInManager.PasswordSignInAsync(user.UserName, model.Password, model.RememberMe, shouldLockout: false);

所以user为null,当您尝试访问用户时,它正在抛出null引用异常。用户名。

相关内容

  • 没有找到相关文章