使用未注册的电子邮件地址登录会引发异常



我在登录网站时遇到了一点逻辑问题。如果没有注册的电子邮件地址,我希望页面上的验证失败,并在电子邮件地址字段下显示一条消息,上面写着"电子邮件地址不存在"或类似性质的内容。

但我不确定下面的登录代码应该如何处理这个问题......

在此代码中,当找不到电子邮件地址时,下面的"user"为空,因此 PasswordSignInAsync 会引发异常,因为用户。属性为空。

我将如何处理对此的验证,这不应该已经内置到我创建的具有单点登录的 ASP.Net MVC 模板的逻辑中吗?

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        // Require the user to have a confirmed email before they can log on.
        var user = await UserManager.FindByEmailAsync(model.Email);
        if (user != null)
        {
            if (!await UserManager.IsEmailConfirmedAsync(user.Id))
            {
                string callbackUrl = await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account-Resend");
                // Uncomment to debug locally  
                // ViewBag.Link = callbackUrl;
                ViewBag.errorMessage = "You must have a confirmed email to log on. "
                                     + "The confirmation token has been resent to your email account.";
                return View("Error");
            }
        }
        // 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(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);
        }
    }
如果您希望将

消息"无效登录尝试"显示为电子邮件地址字段的验证错误,则必须为保存电子邮件地址的 viewModel 的特定属性设置 ModelError。

所以它应该看起来像这样,而"EmailAdress"是viewModel属性的名称:

ModelState.AddModelError("EmailAddress", "Invalid login attempt.");

相关内容

最新更新