构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了
把我们之前的表更新到EF中去
登录在Account控制器,所以我们要添加Account的Model,BLL,DAL
AccountModel我们已经创建好了,下面是DAL和BLL的类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using App.Models; namespace App.IDAL { public interface IAccountRepository { SysUser Login(string username, string pwd); } } IAccountRepository
using System; using System.Collections.Generic; using System.Linq; using System.Text; using App.Models; using App.IDAL; namespace App.DAL { public class AccountRepository : IAccountRepository,IDisposable { public SysUser Login(string username, string pwd) { using (DBContainer db = new DBContainer()) { SysUser user = db.SysUser.SingleOrDefault(a => a.UserName == username && a.Password == pwd); return user; } } public void Dispose() { } } } AccountRepository
using System; using System.Collections.Generic; using System.Linq; using System.Text; using App.Models; namespace App.IBLL { public interface IAccountBLL { SysUser Login(string username, string pwd); } } IAccountBLL
using System.Linq; using System.Text; using App.IBLL; using App.BLL.Core; using Microsoft.Practices.Unity; using App.IDAL; using App.Models; using App.Common; namespace App.BLL { public class AccountBLL:BaseBLL,IAccountBLL { [Dependency] public IAccountRepository accountRepository { get; set; } public SysUser Login(string username, string pwd) { return accountRepository.Login(username, pwd); } } } AccountBLL
注入到容器
container.RegisterType<IAccountBLL, AccountBLL>(); container.RegisterType<IAccountRepository, AccountRepository>();
然后回到Account的控制器上
定义
[Dependency] public IAccountBLL accountBLL { get; set; }
在 public JsonResult Login(string UserName, string Password, string Code)
方法下添加代码
if (Session["Code"] == null) return Json(JsonHandler.CreateMessage(0, "请重新刷新验证码"), JsonRequestBehavior.AllowGet); if (Session["Code"].ToString().ToLower() != Code.ToLower()) return Json(JsonHandler.CreateMessage(0, "验证码错误"), JsonRequestBehavior.AllowGet); SysUser user = accountBLL.Login(UserName, ValueConvert.MD5(Password)); if (user == null) { return Json(JsonHandler.CreateMessage(0, "用户名或密码错误"), JsonRequestBehavior.AllowGet); } else if (!Convert.ToBoolean(user.State))//被禁用 { return Json(JsonHandler.CreateMessage(0, "账户被系统禁用"), JsonRequestBehavior.AllowGet); } AccountModel account = new AccountModel(); account.Id = user.Id; account.TrueName = user.TrueName; Session["Account"] = account; return Json(JsonHandler.CreateMessage(1, ""), JsonRequestBehavior.AllowGet);
其中用到一个加密类处理,这里用的是一个MD5大家可以用自己的加密方式
然而这个类里面包含了其他的一些字符串处理,算是在这里共享给大家。不合适就删掉了
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; using System.Security.Cryptography; namespace YmNets.Common { public static partial class ValueConvert { /// <summary> /// 使用MD5加密字符串 /// </summary> /// <param name="str">待加密的字符</param> /// <returns></returns> public static string MD5(this string str) { if (string.IsNullOrEmpty(str)) { return string.Empty; } MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] arr = UTF8Encoding.Default.GetBytes(str); byte[] bytes = md5.ComputeHash(arr); str = BitConverter.ToString(bytes); //str = str.Replace("-", ""); return str; } /// <summary> /// 将最后一个字符串的路径path替换 /// </summary> /// <param name="str"></param> /// <param name="path"></param> /// <returns></returns> public static string Path(this string str, string path) { int index = str.LastIndexOf('\\'); int indexDian = str.LastIndexOf('.'); return str.Substring(0, index + 1) + path + str.Substring(indexDian); } public static List<string> ToList(this string ids) { List<string> listId = new List<string>(); if (!string.IsNullOrEmpty(ids)) { var sort = new SortedSet<string>(ids.Split(',')); foreach (var item in sort) { listId.Add(item); } } return listId; } /// <summary> /// 从^分割的字符串中获取多个Id,先是用 ^ 分割,再使用 & 分割 /// </summary> /// <param name="ids">先是用 ^ 分割,再使用 & 分割</param> /// <returns></returns> public static List<string> GetIdSort(this string ids) { List<string> listId = new List<string>(); if (!string.IsNullOrEmpty(ids)) { var sort = new SortedSet<string>(ids.Split('^') .Where(w => !string.IsNullOrWhiteSpace(w) && w.Contains('&')) .Select(s => s.Substring(0, s.IndexOf('&')))); foreach (var item in sort) { listId.Add(item); } } return listId; } /// <summary> /// 从,分割的字符串中获取单个Id /// </summary> /// <param name="ids"></param> /// <returns></returns> public static string GetId(this string ids) { if (!string.IsNullOrEmpty(ids)) { var sort = new SortedSet<string>(ids.Split('^') .Where(w => !string.IsNullOrWhiteSpace(w) && w.Contains('&')) .Select(s => s.Substring(0, s.IndexOf('&')))); foreach (var item in sort) { if (!string.IsNullOrWhiteSpace(item)) { return item; } } } return null; } /// <summary> /// 将String转换为Dictionary类型,过滤掉为空的值,首先 6 分割,再 7 分割 /// </summary> /// <param name="value"></param> /// <returns></returns> public static Dictionary<string, string> StringToDictionary(string value) { Dictionary<string, string> queryDictionary = new Dictionary<string, string>(); string[] s = value.Split('^'); for (int i = 0; i < s.Length; i++) { if (!string.IsNullOrWhiteSpace(s[i]) && !s[i].Contains("undefined")) { var ss = s[i].Split('&'); if ((!string.IsNullOrEmpty(ss[0])) && (!string.IsNullOrEmpty(ss[1]))) { queryDictionary.Add(ss[0], ss[1]); } } } return queryDictionary; } /// <summary> /// 得到对象的 Int 类型的值,默认值0 /// </summary> /// <param name="Value">要转换的值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值0</returns> public static int GetInt(this object Value) { return GetInt(Value, 0); } /// <summary> /// 得到对象的 Int 类型的值,默认值0 /// </summary> /// <param name="Value">要转换的值</param> /// <param name="defaultValue">如果转换失败,返回的默认值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值0</returns> public static int GetInt(this object Value, int defaultValue) { if (Value == null) return defaultValue; if (Value is string && Value.GetString().HasValue() == false) return defaultValue; if (Value is DBNull) return defaultValue; if ((Value is string) == false && (Value is IConvertible) == true) { return (Value as IConvertible).ToInt32(CultureInfo.CurrentCulture); } int retVal = defaultValue; if (int.TryParse(Value.ToString(), NumberStyles.Any, CultureInfo.CurrentCulture, out retVal)) { return retVal; } else { return defaultValue; } } /// <summary> /// 得到对象的 String 类型的值,默认值string.Empty /// </summary> /// <param name="Value">要转换的值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值string.Empty</returns> public static string GetString(this object Value) { return GetString(Value, string.Empty); } /// <summary> /// 得到对象的 String 类型的值,默认值string.Empty /// </summary> /// <param name="Value">要转换的值</param> /// <param name="defaultValue">如果转换失败,返回的默认值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值 。</returns> public static string GetString(this object Value, string defaultValue) { if (Value == null) return defaultValue; string retVal = defaultValue; try { var strValue = Value as string; if (strValue != null) { return strValue; } char[] chrs = Value as char[]; if (chrs != null) { return new string(chrs); } retVal = Value.ToString(); } catch { return defaultValue; } return retVal; } /// <summary> /// 得到对象的 DateTime 类型的值,默认值为DateTime.MinValue /// </summary> /// <param name="Value">要转换的值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回的默认值为DateTime.MinValue </returns> public static DateTime GetDateTime(this object Value) { return GetDateTime(Value, DateTime.MinValue); } /// <summary> /// 得到对象的 DateTime 类型的值,默认值为DateTime.MinValue /// </summary> /// <param name="Value">要转换的值</param> /// <param name="defaultValue">如果转换失败,返回默认值为DateTime.MinValue</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回的默认值为DateTime.MinValue</returns> public static DateTime GetDateTime(this object Value, DateTime defaultValue) { if (Value == null) return defaultValue; if (Value is DBNull) return defaultValue; string strValue = Value as string; if (strValue == null && (Value is IConvertible)) { return (Value as IConvertible).ToDateTime(CultureInfo.CurrentCulture); } if (strValue != null) { strValue = strValue .Replace("年", "-") .Replace("月", "-") .Replace("日", "-") .Replace("点", ":") .Replace("时", ":") .Replace("分", ":") .Replace("秒", ":") ; } DateTime dt = defaultValue; if (DateTime.TryParse(Value.GetString(), out dt)) { return dt; } return defaultValue; } /// <summary> /// 得到对象的布尔类型的值,默认值false /// </summary> /// <param name="Value">要转换的值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值false</returns> public static bool GetBool(this object Value) { return GetBool(Value, false); } /// <summary> /// 得到对象的 Bool 类型的值,默认值false /// </summary> /// <param name="Value">要转换的值</param> /// <param name="defaultValue">如果转换失败,返回的默认值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值false</returns> public static bool GetBool(this object Value, bool defaultValue) { if (Value == null) return defaultValue; if (Value is string && Value.GetString().HasValue() == false) return defaultValue; if ((Value is string) == false && (Value is IConvertible) == true) { if (Value is DBNull) return defaultValue; try { return (Value as IConvertible).ToBoolean(CultureInfo.CurrentCulture); } catch { } } if (Value is string) { if (Value.GetString() == "0") return false; if (Value.GetString() == "1") return true; if (Value.GetString().ToLower() == "yes") return true; if (Value.GetString().ToLower() == "no") return false; } /// if (Value.GetInt(0) != 0) return true; bool retVal = defaultValue; if (bool.TryParse(Value.GetString(), out retVal)) { return retVal; } else return defaultValue; } /// <summary> /// 检测 GuidValue 是否包含有效的值,默认值Guid.Empty /// </summary> /// <param name="GuidValue">要转换的值</param> /// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值Guid.Empty</returns> public static Guid GetGuid(string GuidValue) { try { return new Guid(GuidValue); } catch { return Guid.Empty; } } /// <summary> /// 检测 Value 是否包含有效的值,默认值false /// </summary> /// <param name="Value"> 传入的值</param> /// <returns> 包含,返回true,不包含,返回默认值false</returns> public static bool HasValue(this string Value) { if (Value != null) { return !string.IsNullOrEmpty(Value.ToString()); } else return false; } } } ValueConvert.cs
回到前端把alert(1);替换以下代码
$.post('/Account/Login', { UserName: $("#UserName").val(), Password: $("#Password").val(), Code: $("#ValidateCode").val() }, function (data) { if (data.type == "1") { window.location = "/Home/Index" } else { $("#mes").html(data.message); } $("#Loading").hide(); }, "json"); return false;
可以登录了,大家试一下吧!帐号admin,密码admin123