系列目录

我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了

把我们之前的表更新到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(, "请重新刷新验证码"), JsonRequestBehavior.AllowGet); if (Session["Code"].ToString().ToLower() != Code.ToLower())
return Json(JsonHandler.CreateMessage(, "验证码错误"), JsonRequestBehavior.AllowGet);
SysUser user = accountBLL.Login(UserName, ValueConvert.MD5(Password));
if (user == null)
{
return Json(JsonHandler.CreateMessage(, "用户名或密码错误"), JsonRequestBehavior.AllowGet);
}
else if (!Convert.ToBoolean(user.State))//被禁用
{
return Json(JsonHandler.CreateMessage(, "账户被系统禁用"), JsonRequestBehavior.AllowGet);
} AccountModel account = new AccountModel();
account.Id = user.Id;
account.TrueName = user.TrueName;
Session["Account"] = account; return Json(JsonHandler.CreateMessage(, ""), 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(, index + ) + 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(, 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(, 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 = ; i < s.Length; i++)
{
if (!string.IsNullOrWhiteSpace(s[i]) && !s[i].Contains("undefined"))
{
var ss = s[i].Split('&');
if ((!string.IsNullOrEmpty(ss[])) && (!string.IsNullOrEmpty(ss[])))
{
queryDictionary.Add(ss[], ss[]);
}
} }
return queryDictionary;
}
/// <summary>
/// 得到对象的 Int 类型的值,默认值0
/// </summary>
/// <param name="Value">要转换的值</param>
/// <returns>如果对象的值可正确返回, 返回对象转换的值 ,否则, 返回默认值0</returns>
public static int GetInt(this object Value)
{
return GetInt(Value, );
}
/// <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() == "") return false;
if (Value.GetString() == "") 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

ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    系列目录 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了 ...

随机推荐

  1. 彻底理解AC多模式匹配算法

    (本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...

  2. 【每日一linux命令3】参数(或称选项)顺序

    一般除了特殊情况,参数是没有顺序的.举例而言,输入"–a –v"与输入"–v –a"以及"–av" 的执行效果是相同的.但若该参数后指定了要 ...

  3. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  4. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  5. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  6. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  7. 9、委托、事件、Lambda

    开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.)   第 ...

  8. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  9. 创建APPID&&部署服务端教程

    创建APPID&&部署服务端 一.创建APPID 1.打开https://console.developers.google.com ,左击顶部Project,然后左击创建项目 2.输 ...

  10. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...