我們之前做了驗證碼,登錄界面,卻沒有登錄實際的代碼,我們這次先把用戶登錄先完成了,要不權限是講不下去了
把我們之前的表更新到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); } }

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() { } } }

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); } }

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); } } }
注入到容器
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; } } }
回到前端把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