我已经设置了一个获取用户对象的存储库类,并检查输入的密码是否与从数据库中检索到的密码相匹配。当然,密码还有一些额外的安全措施。
我一直在网上做一些研究,我仍然有点困惑,我在用户登录后如何对用户进行身份验证。我知道每个控制器/操作方法都有一个[Authorize]
标签基本上意味着:只允许当前用户在经过身份验证后访问此页面。
我很难理解如何验证它们。
这就是我现在所处的位置:
if (hashedPassword == user.Password)
{
//Correct Login Details
//Mark this user as Authenticated/Logged in
}
我正在使用ASP.NET MVC 4,C#。
非常感谢您提供任何提示,提示和解答。
答案 0 :(得分:2)
这在很大程度上取决于您使用的身份验证框架。
WebSecurity
的一种方式是
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
如果您使用SimpleMembership提供程序,则可以使用:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public virtual ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && membershipProvider.Login(model.UserName, model.Password, model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
或者对于较旧的会员提供商,这可行:
[HttpPost]
public virtual ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}