所以我在框架4.5中使用ASP.NET MVC4创建一个Web应用程序。我想添加一个帐户系统。我创建了一个包含用户和角色的数据库,现在需要将其与我的Web应用程序连接。
我使用visual studio工具添加ADO.NET实体数据模型,并已连接到我的数据库,选中所有表并单击生成。我得到了用户和组表的类,以及database.context
的类(不确定这是什么)。在向导创建了类文件之后,我找到了保护用户的方法(密码加密和用户验证),并且遇到了this网络文章。我在models文件夹中创建了类。
现在它转向控制器,这就是问题所在。当我查看模板项目的源代码时,将Web登录集成到模板中我只会感到困惑。登录控制器中的方法始终具有returnurl
参数,我不知道它来自何处。它还使用WebSecurity.Login()
方法登录,我想知道如何让我的网络应用程序使用我之前引用的方法。
Ofc,如果有一种更简单的方法可以做到这一点而不让VS自动生成很多我不知道该怎么做的代码,最好使用它代替,我不想拥有代码如果我不需要,这对应用程序没用。
数据库本身是自定义的,也就是说,互联网应用程序模板自动生成的表格不适合我的需要。我在网上找到的大多数教程,包括评论中的一个教程,都是使用userProfile表和成员资格表构建实体框架数据库。有没有办法可以调整它,以便创建的表具有不同的结构?如果这种方法更好的话。
更新: 所以我在代码中得到了这一点。我用以下方法创建了一个用户控制器:
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)
我收到以下错误:
The data types text and varchar are incompatible in the equal to operator.
数据库中的类型是文本,代码中的类型定义为字符串。
答案 0 :(得分:0)
好的,所以我的问题与我创建了类型为text的列这一事实有关,因此字符串输入(转换为varchar)无法与文本进行比较。我改变了我的数据库,现在没有问题。一旦我使用db.SaveChanges()
方法,duh:),就会发生对数据库的更改。