找出帐户的最佳方式是未确认,而密码无效。
以下是我的情景:
此时,我们不知道该用户是否输入了无效密码&&尚未确认。
我有这段代码,但对我来说似乎不对。
{
if (ModelState.IsValid)
{
if (WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
else if (WebSecurity.IsConfirmed(model.UserName) == false)
{
ModelState.AddModelError("", "The user account was not confirmed. Please check your email and try again");
return View(model);
}
}
必须有一种方法可以做得更干净。有什么想法吗?
谢谢,
答案 0 :(得分:1)
您的检查方法非常接近。我已使用以下代码进行登录,以检查确认。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
string errorMsg = "The user name or password provided is incorrect.";
if (model.IsConfirmed)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
else if (WebSecurity.FoundUser(model.UserName) && !WebSecurity.IsConfirmed(model.UserName))
{
model.IsConfirmed = false;
errorMsg = "You have not completed the registration process. To complete this process look for the email that provides instructions or press the button to resend the email.";
}
}
else //Need to resend confirmation email
{
ResendConfirmationEmail(model.UserName);
errorMsg = "The registration email has been resent. Find the email and follow the instructions to complete the registration process.";
model.IsConfirmed = true;
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", errorMsg );
return View(model);
}
您会注意到,主要区别在于您还需要使用 FoundUser 方法检查用户是否在系统中,否则 IsConfirmed 将返回false传入错误的用户名。在这种情况下,我向视图模型添加了 IsConfirmed 属性。这在视图中用于确定是否显示了一个按钮,允许用户在丢失确认电子邮件时重新发送确认电子邮件。你可以read more details about this approach in this article。
答案 1 :(得分:0)
我能想到的最简单方法是在登录之前使用Confirmation Token
并激活帐户。
或者,如果您要同时使用令牌和密码进行身份验证,我建议您获取密码,哈希,将其与数据库版本进行比较。在这个阶段,它将是一个直接的纯文本比较。如果token
与userid
匹配且hashed password
也与database password
匹配,则您可以进行身份验证。
如果您需要实际代码,请告诉我。