前言
上一章我们建立了数据库,实现了对业务信息的管理,但是网站的建设中还有一类比较特殊的数据管理,就是对数据的加密以及验证访问,最常用的就是账户的注册,登录,注销,修改等。
为了研究这个问题,本章会在原先网站基础上添加用户注册登录界面。
数据模型
首先,仍然是定义数据模型
Account | ||
---|---|---|
变量 | 类型 | 说明 |
Id | int | 关键值,数据库定位数据用。 |
UserName | string | 用户名 |
Password | string | 用户密码 |
ConfirmedPassword | string | 第二次验证密码,用户注册时用到,不存入数据库 |
函数名 | 参数 | 返回类型 | 功能说明 |
---|---|---|---|
IsValid() | – | bool | 从数据库中对比用户名和密码 |
IsExtends() | – | bool | 判断是否已经存在相同用户名 |
IsPasswordConfirmed() | – | bool | 注册密码验证 |
代码:
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
namespace MvcDemo.Models {
public class Account {
private MvcDemoContext db = new MvcDemoContext();
private string AdminName = "admin";
private string AdminPassword = "admin";
[Key]
public int Id { get; set; }
[Required]
[DisplayName("用户名")]
public string UserName { get; set; }
[Required]
[DisplayName("用户密码")]
[DataType(DataType.Password)]
public string Password { get; set; }
//注册验证密码,不用保存
[NotMapped]
[DisplayName("密码确认")]
[DataType(DataType.Password)]
public string ConfirmedPassword { get; set; }
//该方法应从数据库中对比用户名和密码
public bool IsValid() {
foreach (var item in db.Accounts) {
if (item.UserName == this.UserName && item.Password == this.Password) {
return true;
}
}
//默认管理员密码
if (this.UserName == AdminName & this.Password == AdminPassword) {
return true;
}
return false;
}
//是否是管理员登录
public bool IsAdministrator() {
//默认管理员密码
if (this.UserName == AdminName & this.Password == AdminPassword) {
return true;
}
return false;
}
//判断是否已经存在相同用户名
public bool IsExtends() {
foreach (var item in db.Accounts) {
if (item.UserName == this.UserName) {
return true;
}
}
return false;
}
//注册密码验证
public bool IsPasswordConfirmed() {
if (this.Password == this.ConfirmedPassword) {
return true;
}
return false;
}
}
}
当然还要连接数据库
using System.Data.Entity;
namespace MvcDemo.Models {
public class MvcDemoContext : DbContext {
public MvcDemoContext() : base("name = MvcDemoContext") {
}
public DbSet<Movie> Movies { get; set; }
public DbSet<Music> Musics { get; set; }
//连接账号数据
public DbSet<Account> Accounts { get; set; }
}
}
Controller
然后我们新建
~/Controller/AccountController.cs
在这个Controller中,我们定义在什么情况下,使用什么Action。
using MvcDemo.Models;
using System.Web.Mvc;
namespace MvcDemo.Controllers {
public class AccountController : Controller {
private MvcDemoContext db = new MvcDemoContext();
//Login
public ActionResult Login() {
return View();
}
//Login
[HttpPost]
public ActionResult Login(Account account) {
if (!ModelState.IsValid) {
return View();
}
if (account.IsAdministrator()) {
return RedirectToAction("LoginAsAdministrator", "Account");
}
if (account.IsValid()) {
return RedirectToAction("LoginSuccess", "Account");
}
return View(account);
}
//LoginSuccess
public ActionResult LoginSuccess() {
return View();
}
//LoginAsAdministrator
public ActionResult LoginAsAdministrator() {
return View(db.Accounts);
}
//Register
public ActionResult Register() {
return View();
}
//Register
[HttpPost]
public ActionResult Register(Account account) {
if (!ModelState.IsValid) {
return View(account);
}
if (!account.IsPasswordConfirmed()) {
return View(account);
}
if (account.IsExtends()) {
return View(account);
}
db.Accounts.Add(account);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
}
}
View
最后根据Controller的设计,添加相应的View。