[英]creating a login controller in MVC project
因此,我正在框架4.5中使用ASP.NET MVC4创建一个Web应用程序。 我希望添加一个帐户系统。 我创建了一个包含用户和角色的数据库,现在需要将其与我的Web应用程序连接。
我已使用Visual Studio工具添加了ADO.NET实体数据模型,并已连接到我的数据库,选择了所有表并单击“生成”。 我有用于用户和组表的类,以及用于database.context
的类(不确定这是什么)。 向导创建了类文件后,我出去寻找一种保护用户的方法(密码加密和用户验证),并浏览了此 Web文章。 我在models文件夹中创建了该类。
现在将其交给控制器,问题就在这里。 当我查看将Web登录集成到模板中的模板项目的源时,只会感到困惑。 登录控制程序中的方法始终具有returnurl
参数,而我不知道其来源。 它还使用WebSecurity.Login()
方法登录,我想知道如何使我的Web应用程序使用我之前引用的方法。
Ofc,如果有一种更简单的方法可以做到这一点,而又不让VS自动生成很多我不知道该怎么做的代码,那么最好改用它,因为我不想拥有没有用的代码到应用程序,如果我不需要的话。
数据库本身是自定义的,也就是说,由Internet应用程序模板自动生成的表不适合我的需求。 我在网上找到的大多数教程,包括注释中的一个,都在使用带有UserProfile表和Membership表的实体框架数据库构建。 我是否可以调整此方法,以使创建的表具有不同的结构? 如果那种方法更好的话。
更新:所以我到了代码的这一点。 我用以下方法创建了一个用户控制器:
internal bool UserExists(LoginModel model)
private void CheckIfFirstDeploy()
private void RegisterFirstAdmin()
private void registerUser(string ALPHA_ADMIN_USERNAME, string ALPHA_ADMIN_PASSWORD, Group group)
internal bool PasswordValid(LoginModel model)
帐户控制器(即另一个类和文件),它是用户控制器的实例,其运行方式类似于身份验证:
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginModel model, string returnUrl)
{
UsersController uc = new UsersController();
if (ModelState.IsValid && uc.UserExists(model) && uc.PasswordValid(model))
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
return View("Dashboard");
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
当应用程序注意到没有用户条目时,它将运行CheckIfFirstDeploy()
函数,使用前3个角色填充groups表,并创建第一个admin用户,如下所示:
private void RegisterFirstAdmin(){
const string ALPHA_ADMIN_USERNAME = "username";
const string ALPHA_ADMIN_PASSWORD = "password";
if (db.Groups.Count() == 0)
{
db.Groups.Add(new Groups()
{
GroupName = "Administrator"
});
db.Groups.Add(new Groups()
{
GroupName = "Manager"
});
db.Groups.Add(new Groups()
{
GroupName = "User"
});
}
registerUser(ALPHA_ADMIN_USERNAME,
ALPHA_ADMIN_PASSWORD,
Group.Administrator);
}
private void registerUser(string ALPHA_ADMIN_USERNAME,
string ALPHA_ADMIN_PASSWORD,
Group group) {
db.Users
.Add(
new Users() {
Email = ALPHA_ADMIN_USERNAME,
Hash = Crypto.PasswordHash.CreateHash(ALPHA_ADMIN_PASSWORD),
GroupId = 1
}
);
}
当我运行该应用程序时,我遇到了一些问题。 首先,似乎数据库没有被我打算插入的组填充,其次是我有if (db.Users.Count(u => u.Email == model.UserName) != 1)
我收到以下错误:
The data types text and varchar are incompatible in the equal to operator.
数据库中的类型是文本,在代码中其类型定义为字符串。
好的,所以我的问题与以下事实有关:我用text类型创建了列,因此无法将字符串输入(转换为varchar)与文本进行比较。 我更改了数据库,现在没有问题。 一旦使用db.SaveChanges()
方法duh :),就发生了对数据库的更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.