C# 使用SQL使用MVC登录

C# 使用SQL使用MVC登录,c#,asp.net,asp.net-mvc,sqlclient,C#,Asp.net,Asp.net Mvc,Sqlclient,我使用的是默认的MVC包,您在创建一个新项目时首先使用它。我将此代码添加到我的登录脚本中,在他们单击“提交”按钮后,它将尝试让他登录,并且它不允许我使这个User.Identity.IsAuthenticated工作,因此我可以在他成功登录后触发某些事件 public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid)

我使用的是默认的MVC包,您在创建一个新项目时首先使用它。我将此代码添加到我的登录脚本中,在他们单击“提交”按钮后,它将尝试让他登录,并且它不允许我使这个User.Identity.IsAuthenticated工作,因此我可以在他成功登录后触发某些事件

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        // This doesn't count login failures towards account lockout
        // To enable password failures to trigger account lockout, change to shouldLockout: true
        using (SqlConnection connection = new SqlConnection("server=server; database=db; user id=user; password=password"))
        {
            connection.Open();
            using (SqlCommand command = new SqlCommand("SELECT * FROM ACCOUNTS WHERE [UserName] = @param1 AND [PasswordField] = @param2 AND [Active] = 1", connection))
            {
                command.Parameters.Clear();
                command.Parameters.AddWithValue("param1", model.UserName);
                command.Parameters.AddWithValue("param2", model.Password);
                SqlDataReader adapter = command.ExecuteReader();
                if (adapter.Read())
                {
                    var user = new ApplicationUser { UserName = model.UserName, Email = model.UserName };
                    var result = await UserManager.CreateAsync(user, model.Password);
                    if (result.Succeeded)
                    {
                        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Invalid login attempt.");
                    return View(model);
                }
            }
            connection.Close();
            connection.Dispose();
            return RedirectToAction("Index", "Home", "Index");
        }
    }

我想这可以称为可靠,意思是:你可能可以登录

另一方面,它似乎一点也不安全:SQL查询意味着您将密码存储在clear中。至少你应该这样做


有许多可插拔的身份验证系统,如ASP.Net成员身份系统(旧的,但仍然有效)或ASP.Net身份系统(新的),可以为您处理繁重的任务。

您使用的是什么版本的MVC?此外,您是否有理由实现自己的身份验证系统,而不是使用类似ASPNet Identity的东西?@BrendanGreen。我想使用ASPNet标识,但我的问题是我不知道如何将数据库链接到它,以便它可以验证登录到我的表。从这里开始:还有一件事,如果您使用的是MVC4或更高版本,请在成功登录后使用“RedirectToLocal”(而不是“RedirectToAction”)防止跨站点黑客。要让用户完全登录,需要做些什么?在登录过程中,我最终没有发现任何异常或错误,我检查了我的数据库,如果用户名和密码正确,我会将他作为正确的登录用户添加到列表中并登录。在它旋转并让他登录之后。我单击需要if(User.Identity.IsAuthenticated)为true且不起作用的按钮。
public ActionResult IsAuthenicated()
{
     if (User.Identity.IsAuthenticated)
     {
         //go to new screen
     }
     else
     {
         //return back to login screen
     }
}