ASP .净MVC5网站开发之登录、验证和注销管理员篇1(六)
上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录、验证和注销功能。
一、业务逻辑层1、实现256散列加密方法。
尼尼微。核心【右键】- 添加-文件夹,输入文件夹名将军。
一般文件夹【右键】-添加-类,输入类名安全。
引用系统。安全性。密码学命名空间(1),并实现SHA256静态加密方法。
2、管理员模型类
尼尼微。核心【右键】- 添加-类,输入类名管理员。
添加引用系统。组件模型。数据注释;完成的类代码
使用系统;使用系统。组件模型。数据注释;命名空间尼尼微.核心{ ///摘要///管理员模型////摘要公共类管理员{[Key]public int Administrator id { get;设置;} ///摘要///帐号////摘要[必选(错误消息='必须输入{ 0 } ')][字符串长度(30,最小长度=4,错误消息='{0}长度为{2}-{1}个字符)][显示(名称='帐号)]公共字符串帐户{获取设置;} ///摘要///密码////摘要[DataType(数据类型。密码)][必需(错误消息='必须输入{ 0 } ')][字符串长度(256,错误消息='{0}长度少于{1}个字符)][显示(名称='密码)]公共字符串密码{ get设置;} ///摘要///登录IP////摘要[显示(名称='登录IP')]公共字符串LoginIP { get设置;} ///摘要///登录时间////摘要[显示(名称='登录时间)]public NullableDateTime LoginTime { get;设置;} ///摘要///创建时间////摘要[显示(名称='创建时间)]公共日期时间创建时间{获取设置;} }}3、数据上下文
打开尼尼微核心-九天上下文添加管理员属性
红框内为添加内容。
4、管理者管理类
尼尼微。核心【右键】- 添加-类,输入类名管理员。
类继承自basemanageradadministrator。
为类添加尼尼微。核心。类型引用。
使用尼尼微。核心。类型;使用系统;命名空间尼尼微.核心{公共类管理员: basemanageradministrator {///summary///添加////summary ///param name='admin '管理员实体/param/返回/返回公共覆盖响应添加(管理员管理){ Response _ resp=new Response();if(hasccounts(admin .帐户)){ _resp .代码=0;_resp .消息='帐号已存在;} else _resp=base .添加(管理员);return _ resp} ///摘要///修改密码////summary///param name=' administrator id '主键/param ///param name='password '新密码【密文】/param/返回/返回公共响应更改密码(int管理员id,字符串密码){ Response _ resp=new Response();var _ admin=Find(管理员id);if (_admin==null) { _resp .代码=0;_resp .消息='该主键的管理员不存在;} else { _admin .密码=密码;_ resp=Update(_ admin);} return _ resp} ///摘要///删除////summary///param name=' administrator id '主键/param/返回/返回公共覆盖响应删除(int管理员id){ Response _ resp=new Response();if (Count()==1) { _resp .代码=0;_resp .消息='不能删除唯一的管理员帐号;} else _resp=base .删除(管理员id);return _ resp} ///摘要///查找////summary///param name=' accounts '帐号/param/返回/返回公共管理员查找(字符串帐户){返回基数。存储库。查找(a=a。帐户==账户);} ///摘要///帐号是否存在////summary///param name=' accounts '帐号/param///returns/returns public bool HasAccounts(字符串帐户){返回基数.存储库。is包含(a=a .帐户。Toupper()==帐户.ToUpper());} ///摘要///更新登录信息////summary///param name=' administrator id '主键/param ///param name='ip'IP地址/param ///param name='time '时间/param///returns/returns public Response upadatelogeninfo(int administrator id,string ip,DateTime time){ Response _ resp=new Response();var _ admin=Find(管理员id);if (_admin==null) { _resp .代码=0;_resp .消息='该主键的管理员不存在;} else { _admin .LoginIP=ip_管理员LoginTime=时间;_ resp=Update(_ admin);} return _ resp} ///摘要///验证////summary///param name=' accounts '帐号/param ///param name='password '密码【密文】/param ///returnsCode:1-成功;2-帐号不存在;3-密码错误/返回公共响应验证(字符串帐户,字符串密码){ Response _resp=新响应();var _admin=base .存储库。查找(a=a。帐户==账户);if (_admin==null) { _resp .代码=2;_resp .消息='帐号为:【'账户'】的管理员不存在;} else if (_admin .Password==password) { _resp .代码=1;_resp .消息='验证通过;} else { _resp .代码=3;_resp .消息='帐号密码错误;} return _ resp} }}二、展示层实现
首先,添加css。
尼尼微。网络内容【右键】-添加-试样表,输入名称StyleControl。
打开尼尼微Web-App_Start-BundleConfig.cs .
添加红框内代码StyleControl.css具体内容这里省略了。
其次,添加对尼尼微。核心的引用。
尼尼微。蹼引用【右键】-添加引用。在引用管理器中选择项目-解决方案-尼尼微核心
处理完这两项内容就继续具体内容了:
1、管理员身份验证类AdminAuthorizeAttribute
AdminAuthorizeAttribute继承自AuthorizeAttribute,重写AuthorizeCore方法,通过会话['AdminID']来判断管理员是否已经登录,重写HandleUnauthorizedRequest方法来处理未登录时的页面跳转。
使用系统网络.使用系统网络。手动音量调节命名空间尼尼微.网络。区域。控件{///summary///管理员身份验证类////摘要公共类AdminAuthorizeAttribute : AuthorizeAttribute {///摘要///重写自定义授权检查////summary///returns/returns protected override bool AuthorizeCore(Httpcontextbase Httpcontext){ if(Httpcontext .会话['AdminID']==null)返回错误的否则返回真;} ///摘要///重写未授权的超文本传送协议请求处理////summary protected override void handler unauthorizationcontext filter context){ filter context .结果=新的重定向结果(' ~/控制/管理/登录');} } }尼尼微。网络-区域-控制【右键】-添加-类,输入控制器名称家庭控制器。
为家庭控制器添加[管理授权]
2、管理员控制器尼尼微。网络区域控制控制器[右键】-添加-控制器。选择MVC5控制器 空,输入控制器名称管理员。
在控制器中引用尼尼微。核心、尼尼微。核心。概述和尼尼微。网络。区域。控制。模型命名空间。
添加私有变量私有管理员adminManager=新管理员();
为管理控制器添加[管理授权]
3.1 管理员登录
3.1.1 登录视图模型
尼尼微。网络-区域-控制-模型【右键】-添加-类,输入类名LoginViewModel。
命名空间尼尼微.网络。区域。控制。车型{///总结///登录模型////摘要公共类LoginViewModel { ///摘要///帐号////摘要[必选(错误消息='必须输入{ 0 } ')][字符串长度(30,最小长度=4,错误消息='{0}长度为{2}-{1}个字符)][显示(名称='帐号)]公共字符串帐户{获取设置;} ///摘要///密码////摘要[DataType(数据类型。密码)][必需(错误消息='必须输入{ 0 } ')][字符串长度(20,最小长度=6,错误消息='{0}长度{2}-{1}个字符)][显示(名称='密码)]公共字符串密码{ get设置;} }}3.1.2 登录方法
在管理控制器中添加登录()方法
///摘要///登录////summary///returns/returns[AllowAnonymous]公共操作结果日志in(){ return View();}3.1.3 登录视图
在登录()方法上点【右键】-添加视图
模板选创造,模型类选LoginViewModel,选项选中引用脚本库。完成后代码
@模型尼尼微网络。区域。控制。模特。loginview模型@ { Layout=null}!DOCTYPE htmlhtmlhead元名称=“视口”内容=' width=设备宽度'/title登录/title @Styles .呈现(' ~/内容/控件CSS ')@脚本渲染(' ~/bundle/modernizr ')/头体@脚本.渲染(' ~/bundle/jquery ')@脚本.render(' ~/bundles/jqueryval ')div class=' loginform ' div class=' form-horizontal ' H2 class=' text-primary '登录/H2/使用(Html .begin inform()){ @ Html .antiforgrytoken()@ Html .ValidationSummary(true,',new { @ class=' text-danger ' })div class=' form-group form-group-LG ' @ Html .编辑(模型=模型.Accounts,new { HTMlAttributes=new { @ class=' form-control ',placeholder='帐号} }) @Html .ValidationMessageFor(model=model .Accounts,',new { @ class=' text-danger ' })/div div class=' form-group form-group-LG ' @ Html .编辑(模型=模型.密码,新{ HTMl Attributes=new { @ class=' form-control ',占位符='密码} }) @Html .ValidationMessageFor(model=model .密码',new { @ class=' text-danger ' })/div div class=' form-group form-group-LG '输入类型='submit '值='登录BTNBTN默认右拉//div } /div /div/body/html在管理控制器中添加登录的处理方法公共操作结果登录(登录视图模型登录视图模型)
[AllowAnonymous][validateantforgretoken][httpset]公共操作结果登录(loginview model loginview model){ if(model state .IsValid){ string _ passowrd=Security .SHA256(loginViewModel .密码);var _response=adminManager .验证(登录视图模型.Accounts,_ passowrd);if(_响应.代码==1) { var _admin=adminManager .查找(登录视图模型.账户);会话。添加(' AdminID ',_admin .管理员id);会话。添加('帐户',_管理员。账户);_管理员LoginTime=日期时间.现在;_管理员LoginIP=请求用户主机地址管理器.更新(_ admin);返回RedirectToAction('Index ',' Home ');} else if (_response .代码==2)模型状态.addmodelarror(' Accounts ',_response .消息);否则if (_response ).代码==3)模型状态.addmodelarror(' Password ',_response .消息);否则模式状态.AddModelError ',_response .消息);}返回视图(loginview模型);}4、注销
在管理控制器中添加注销的处理方法公共操作结果注销()
///摘要///注销////summary///returns/returns公共操作结果Logout(){ Session .clear();返回重定向至操作("登录");}完工可以按F5测试了。
登录界面,输入帐号mzwhj密码123456,登录成功。
登录成功界面。
=====================================================
代码见:https://九天。codeplex。com/源代码管理/最新
代码下载:https://ninesky.codeplex.com点击源代码点击[计]下载下载源文件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:ASP .净MVC5网站开发之登录、验证和注销管理员篇1(六)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















