我使用的是您在创建新项目时开始使用的默认 MVC 包。我将此代码添加到我的登录脚本中,在他们单击提交按钮后,它将尝试登录他,并且不允许我使此User.Identity.IsAuthentication工作,因此我可以在他成功登录后触发某些内容。
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");
}
}
如果他已登录,我想做类似的事情
public ActionResult IsAuthenicated()
{
if (User.Identity.IsAuthenticated)
{
//go to new screen
}
else
{
//return back to login screen
}
}
我想
它可以被称为可靠,意思是:你可能可以登录。
另一方面,它似乎一点也不安全:SQL查询意味着您以明文形式存储密码。至少您应该对所有密码进行哈希和加盐。
有许多可插拔的身份验证系统,例如 ASP.Net 成员资格(现在很旧,但仍然可以工作)或 ASP.Net 身份(新),可以为您处理繁重的工作。