我正在学习ASP.NET MVC,并且我以前从未使用过.Net授权和成员工具。
我正在创建一个应用程序,它将允许用户登录和他们拥有的动物,因此它将有许多表
在教程中,我看到了成员资格和授权工具似乎为登录数据创建了一个新的数据库。这如何与我自己的定制表一起工作?
谢谢
发布于 2013-12-09 00:10:00
如果你有定制表,这真的很容易做到。但在这种情况下,您必须手动检查密码。
这里有几个简单的步骤。
首先,将表单授权添加到web.config文件:
<authentication mode="Forms">
<forms loginUrl="~/login" defaultUrl="/" name=".ASPXFORMSAUTH" protection="All" slidingExpiration="true" path="/" timeout="50000000" />
</authentication>确保在RouteConfig.cs中正确配置了控制器
routes.MapRoute("Login", "login", new { controller = "Login", action = "Login" });根据存储在现有表中的信息,创建自己的密码验证函数:
public bool ValidatePassword(string email, string password)
{
bool isValid = false;
// TODO: put your validation logic here
return isValid;
}请注意,您可以使用用户名或电子邮件。我更喜欢电子邮件,因为用户永远不会忘记他们的电子邮件,但通常会有几个用户名。
创建登录控制器:
public class LoginController : Controller
{
[HttpGet]
public ActionResult Login()
{
if(Request.IsAuthenticated)
{
return View("AlreadyLoggedIn");
}
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Login(LoginViewModel viewModel)
{
if(ModelState.IsValid)
{
var isPasswordValid = ValidatePassword(viewModel.Email, viewModel.Password);
if(isPasswordValid)
{
FormsAuthentication.SetAuthCookie(viewModel.Email, true);
// now the user is authenticated
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("password", "Invalid password");
}
}
return View(viewModel);
}
}查看模型非常简单:
public class LoginViewModel
{
[Required(ErrorMessage = "Please type your email")]
[EmailAddress(ErrorMessage = "Please provide correct email address")]
public string Email { get; set; }
[Required(ErrorMessage = "Please type your password")]
public string Password { get; set; }
}如果您想限制对某些页面的访问,请使用Authorize属性:
public class AnotherController : Controller
{
[Authorize, HttpGet]
public ActionResult Index()
{
...
}
}总而言之,您只需要将所有数据库登录验证逻辑放到ValidatePassword函数中,仅此而已!
https://stackoverflow.com/questions/20454888
复制相似问题