在LogIn ASP.NET MVC上验证用户

时间:2013-12-29 22:07:00

标签: c# asp.net-mvc authentication

我已经设置了一个获取用户对象的存储库类,并检查输入的密码是否与从数据库中检索到的密码相匹配。当然,密码还有一些额外的安全措施。

我一直在网上做一些研究,我仍然有点困惑,我在用户登录后如何对用户进行身份验证。我知道每个控制器/操作方法都有一个[Authorize]标签基本上意味着:只允许当前用户在经过身份验证后访问此页面。

我很难理解如何验证它们。

这就是我现在所处的位置:

if (hashedPassword == user.Password)
{
    //Correct Login Details
    //Mark this user as Authenticated/Logged in
}

我正在使用ASP.NET MVC 4,C#。

非常感谢您提供任何提示,提示和解答。

1 个答案:

答案 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);
    }