C# 在MVC项目中创建登录控制器
因此,我正在使用framework 4.5中的ASP.NET MVC4创建一个web应用程序。我想增加一个帐户系统。我已经创建了一个包含用户和角色的数据库,现在需要将其与我的web应用程序连接 我已使用visual studio工具添加ADO.NET实体数据模型,并已连接到我的数据库,选择所有表并单击“生成”。我得到了用户表和组表的类,以及数据库上下文的类(不确定这是什么)。在向导创建了类文件之后,我出去寻找保护用户的方法(密码加密和用户验证),并看到了一篇web文章。我在models文件夹中创建了这个类 现在是控制器的问题了,这里是问题所在。当我查看将web登录集成到模板中的模板项目的源代码时,我只会感到困惑。登录控件中的方法总是有C# 在MVC项目中创建登录控制器,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,因此,我正在使用framework 4.5中的ASP.NET MVC4创建一个web应用程序。我想增加一个帐户系统。我已经创建了一个包含用户和角色的数据库,现在需要将其与我的web应用程序连接 我已使用visual studio工具添加ADO.NET实体数据模型,并已连接到我的数据库,选择所有表并单击“生成”。我得到了用户表和组表的类,以及数据库上下文的类(不确定这是什么)。在向导创建了类文件之后,我出去寻找保护用户的方法(密码加密和用户验证),并看到了一篇web文章。我在models文件夹中创
returnurl
参数,我不知道这是从哪里来的。它还使用WebSecurity.Login()
方法登录,我想知道如何让我的web应用程序使用我以前引用过的方法
Ofc,如果有一种更简单的方法来做到这一点,而不让VS自动生成很多我不知道该怎么做的代码,那么最好使用它,如果我不需要的话,我不希望有对应用程序没有用处的代码
数据库本身是自定义的,也就是说,由internet应用程序模板自动生成的表不适合我的需要。我在web上找到的大多数教程(包括注释中的教程)都是使用内置实体框架数据库的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表,并创建第一个管理员用户,如下所示:
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)
我得到以下错误:
数据类型text和varchar在等于运算符中不兼容。
数据库中的类型是文本,在代码中定义为字符串。好的,所以我的问题是因为我创建了文本类型的列,所以字符串输入(转换为varchar)无法与文本进行比较。我更改了数据库,现在没有问题了。数据库的更改发生在我使用
db.SaveChanges()
方法duh:)之后。为什么假设VS生成“垃圾代码”?我敢肯定,该代码已经过很好的测试,可能会满足您的需求。这可能也会为你节省一些时间。如果您想要一个健壮而灵活的身份验证系统,您应该看看新的身份工具:我可能使用了错误的术语。我想说的是,我不喜欢使用我不熟悉的代码。在帖子中添加了额外的说明如果你不熟悉,为什么不熟悉呢。NET的文档非常丰富,而MVC是一个相对较新的框架,这一事实使它更易于使用。