【问题标题】:Wrong authentication in asp mvc 4asp mvc 4中的错误身份验证
【发布时间】:2016-07-18 05:05:27
【问题描述】:

我有登录页面,如果密码或用户名无效,我想重定向到同一页面。 这是登录帖子中的代码:

[HttpPost]
public ActionResult Login(LoginModel lm, string returnUrl)
{
    using (WorkLayer dal = new WorkLayer())
    {
        if (ModelState.IsValid)
        {
           // UserManager UM = new UserManager();
           //   string password = UM.GetUserPassword(ULV.LoginName);
            string password = dal.Users.GetUserInfo(lm.UserName).HashPassword.ToString();

            if (string.IsNullOrEmpty(password))
                ModelState.AddModelError("", "The user login or password provided is incorrect.");

            else
            {

                if (lm.HashPassword.Equals(password))
                {
                    FormsAuthentication.SetAuthCookie(lm.UserName, false);
                    return RedirectToAction("AdminPanel");
                } 
                else
                {
                    ModelState.AddModelError("", "The password provided is incorrect.");
                    return RedirectToAction("Login");
                }
            }
        } 
    }
    return View(lm);

}

以及 Action Admin 中的代码:

[Authorize]
public ActionResult AdminPanel()
{
    return View();
}

但每次我输入正确的用户名和密码时,我都会收到:

HTTP 错误 401.0 - 未经授权 您无权查看此目录或页面。 最可能的原因:

The authenticated user does not have access to a resource needed to process the request.

【问题讨论】:

  • 添加ModelStateError 然后重定向有什么意义。您需要返回视图(return View(lm);
  • 密码不等于散列密码(对吧?你不是存储普通密码吗……)
  • 现在 - 是的。然后我要编写哈希密码的程序。
  • 我现在没有角色,因为它是一个非常小的网站。

标签: c# asp.net .net asp.net-mvc asp.net-mvc-4


【解决方案1】:

您的Login 操作中似乎缺少[AllowAnonymous] 属性。 AccountController 通常有一个 [Authorize] 属性,这意味着您需要允许匿名操作您希望尚未经过身份验证的请求得到服务。

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginModel lm, string returnUrl) {...}

正如@StephenMuecke 在 cmets 中提到的,您不需要重定向错误/无效凭据。让动作流向完成。

这是重构的 Login 操作

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginModel lm, string returnUrl) {
    using (WorkLayer dal = new WorkLayer()) {
        if (ModelState.IsValid) {
            string password = dal.Users.GetUserInfo(lm.UserName).HashPassword.ToString();

            if (!string.IsNullOrEmpty(password) && lm.HashPassword.Equals(password)) {
                FormsAuthentication.SetAuthCookie(lm.UserName, false);
                return RedirectToAction("AdminPanel");
            } else {
                ModelState.AddModelError("", "The user login or password provided is incorrect.");                    
            }
        } 
    }
    return View(lm);
}

【讨论】:

  • 它适用于不正确的用户名或密码,但不适用于正确的用户名或密码。我再次看到相同的消息。
猜你喜欢
  • 2012-12-27
  • 2016-05-04
  • 2012-08-24
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多