上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用AuthorizeAttribute属性的方式。之前还要解决几个问题,然后才重写验证类,最后稍微改一下界面。

目录

MVC5 网站开发实践  概述

MVC5 网站开发实践  1、建立项目

MVC5 网站开发实践  2、后台管理

MVC5 网站开发实践  2.1、管理员登陆

一、解决问题Home控制器错误提示

@泰德  在评论中说浏览器中打开存在以下错误。这是因为项目中存在多个Home控制器,但系统不清楚你要访问的是哪个控制器的内容,因此要给各路由加上命名空间。

1、首先打开 App_Start文件夹的RouteConfig文件,添加命名空间 namespaces: new string[] { "Ninesky.Website.Controllers" }

2、打开Config区域的 ConfigAreaRegistration文件,同样添加命名空间  new string[] { "Ninesky.Website.Areas.Config.Controllers" }

3、打开Member区域的MemberAreaRegistration文件,添加命名空间  new string[] { "Ninesky.Website.Areas.Member.Controllers" }

二、建立管理员登录验证属性

1、在Areas\Config文件夹上点右键新建类【AdminAuthorizeAttribute】,该类继承自AuthorizeAttribute。第一步重写AuthorizeCore,返回true则通过验证,返回false则验证失败,在2.1的管理员登录采用的session来保存管理员信息,这里只要检查Session["Account"]是否为空就可以知道用户是否登录。第二步HandleUnauthorizedRequest,该方法只有验证失败时才会执行,这里用来在验证跳转到管理员登录界面。代码如下:

  1. using System.Web;
  2. using System.Web.Mvc;
  3.  
  4. namespace Ninesky.Website.Areas.Config
  5. {
  6. /// <summary>
  7. /// 管理员身份验证
  8. /// <remarks>
  9. ///创建:2014年12月16日
  10. /// </remarks>
  11. /// </summary>
  12. public class AdminAuthorizeAttribute : AuthorizeAttribute
  13. {
  14. protected override bool AuthorizeCore(HttpContextBase httpContext)
  15. {
  16. bool _pass = false;
  17. if (httpContext.Session["Account"] != null) _pass = true;
  18. return _pass;
  19. }
  20. protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
  21. {
  22. filterContext.Result = new RedirectResult("~/Config/Administrator/Login");
  23. }
  24. }
  25. }

2、控制器加上验证属性

打开config区域的Homecontroller 在控制器上添加“AdminAuthorize”属性。

同样为AdministratorController加上“AdminAuthorize”属性,并为“Login”action添加”AllowAnonymous“属性。

现在我们直接方位/Config/Home/Index 就会跳转到登陆界面。

三、界面制作

1、稍微美化一下登录界面。

打开Config区域Administrator的Login视图。修改代码如下:

  1. @model Ninesky.Website.Areas.Config.Models.LoginViewModel
  2.  
  3. @{
  4. Layout = null;
  5. }
  6.  
  7. <!DOCTYPE html>
  8.  
  9. <html>
  10. <head>
  11. <meta name="viewport" content="width=device-width" />
  12. <title>管理员登陆</title>
  13. </head>
  14. <body>
  15. @Styles.Render("~/Content/bootstrap.css")
  16. @Scripts.Render("~/bundles/jquery")
  17. @Scripts.Render("~/bundles/jqueryval")
  18. @Scripts.Render("~/bundles/bootstrap")
  19.  
  20. @using (Html.BeginForm())
  21. {
  22. @Html.AntiForgeryToken()
  23.  
  24. <div id="loginBox" class="panel panel-default" style="max-width:400px; margin:auto">
  25. <div class="panel-heading"><h4>管理员登陆</h4></div>
  26. <div class="panel-body">
  27. @Html.ValidationSummary(true, "", new { @class = "text-danger" })
  28. <div class="form-group">
  29. @Html.LabelFor(model => model.Account, htmlAttributes: new { @class = "control-label col-md-2" })
  30. <div class="col-md-10">
  31. @Html.EditorFor(model => model.Account, new { htmlAttributes = new { @class = "form-control" } })
  32. @Html.ValidationMessageFor(model => model.Account, "", new { @class = "text-danger" })
  33. </div>
  34. </div>
  35.  
  36. <div class="form-group">
  37. @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
  38. <div class="col-md-10">
  39. @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
  40. @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
  41. </div>
  42. </div>
  43.  
  44. <div class="form-group">
  45. <div class="col-md-offset-2 col-md-10">
  46. <input type="submit" value="登陆" class="btn btn-default btn-block" />
  47. </div>
  48. </div>
  49. </div>
  50. </div>
  51. }
  52.  
  53. </body>
  54. </html>
  55. <script type="text/javascript">
  56. $("#loginBox").css("margin-top", ($(window).height() - $("#loginBox").height()) / 2);
  57. </script>

改好后的登录界面。

2、修改Config区域布局页,修改后的代码如下

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>网站管理 - @Page.Title</title>
  5. @Styles.Render("~/Content/bootstrap.css")
  6. @Styles.Render("~Areas/Config/Content/Style.css")
  7. @Scripts.Render("~/bundles/jquery")
  8. @Scripts.Render("~/bundles/jqueryval")
  9. @Scripts.Render("~/bundles/bootstrap")
  10. @RenderSection("head", required: false)
  11. </head>
  12. <body>
  13. <nav class="navbar navbar-default" role="navigation">
  14. <div class="container-fluid">
  15. <div class="navbar-header">
  16. <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar" aria-expanded="true" aria-controls="navbar">
  17. <span class="sr-only">Toggle navigation</span>
  18. <span class="icon-bar"></span>
  19. <span class="icon-bar"></span>
  20. <span class="icon-bar"></span>
  21. </button>
  22. <a class="navbar-brand">Ninesky</a>
  23. </div>
  24. <div id="navbar" class="navbar-collapse collapse" aria-expanded="true">
  25. <ul class="nav navbar-nav">
  26. <li class="active"><a href="#">桌面</a></li>
  27. <li><a href="#">内容管理</a></li>
  28. <li><a href="#">用户管理</a></li>
  29. <li><a href="#">栏目管理</a></li>
  30. <li><a href="#">网站设置</a></li>
  31. </ul>
  32. </div>
  33. </div>
  34. </nav>
  35. @RenderBody()
  36. <div class="navbar-fixed-bottom"> Copyright ©洞庭夕照 http://mzwhj.cnblogs.com</div>
  37. </body>
  38. </html>

现在可以看下登录后的页面。

======================

代码:http://pan.baidu.com/s/1ntt9gKT

MVC5 网站开发实践 2.2、管理员身份验证的更多相关文章

  1. MVC5 网站开发实践 概述

    目录 MVC5 网站开发实践  概述 MVC5 网站开发实践  1.建立项目 MVC5 网站开发实践  2.后台管理 MVC5 网站开发实践  2.1.管理员登陆 MVC5 网站开发实践 2.2.管理 ...

  2. MVC5 网站开发实践 2.1、管理员登陆

    目录 MVC5 网站开发实践  概述 MVC5 网站开发实践  1.建立项目 MVC5 网站开发实践  2.后台管理   1. 创建SHA256加密方法. 在Data项目中添加文件夹[Security ...

  3. MVC5 网站开发实践 2、后台管理

    目录 MVC5 网站开发实践 概述 MVC5 网站开发实践 1.建立项目   从这一部分开始做后台管理,首先是基本框架的 一.Data项目 1.项目添加EntityFramework引用 在Data项 ...

  4. MVC5 网站开发实践 1、建立项目

    目录 MVC5 网站开发实践 概述   一.建立项目 1.建立团队项目 在办公室和家里使用不同的电脑,为了方便代码的共享将项目建立为团队项目.   如图打开vs2013→新建→团队项目(图1),会自动 ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域–管理列表、回复及删除

    本来想接着上次把这篇写完的,没想到后来工作的一些事落下了,放假了赶紧补上. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一) - 项目框架 ASP ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  9. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

随机推荐

  1. php和ajax 服务器端做轮询推送(定义)

    基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...

  2. Devexpress

    1.隐藏最上面的GroupPanel gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值 sValue=Table.Rows[gri ...

  3. java基础1_标识符,数据类型

    JDK的卸载与安装 : 1  卸载 a 从程序中卸载   控制面板 - 程序和功能 - 卸载JDK; b 删除  C:\Windows\System32 下面的  java   javac  java ...

  4. USACO翻译:USACO 2013 JAN三题(1)

    USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入 ...

  5. 【JSOI2007】【Bzoj1029】建筑抢修

    贪心... 按照T2来进行排序,用堆来进行维护.循环一遍,如果循环时间加上已用时间不超过截止时间,那就ANS++.否则,将它与堆顶判断,如果小于堆顶就把堆顶踢出,把它加入. #include<c ...

  6. WUI 前端组件

    为什么会有WUI前端组件,我们接触的UI组件如:YUI.EXTjs.EasyUI,这些组件虽然提供了丰富的UI,并且一定程度上缩短了开始时间,单这些组件提供的页面风格是统一的,我们的产品风格不可能像这 ...

  7. “眉毛导航”——SiteMapPath控件的使用(ASP.NET)

    今天做网站的时候,用到了SiteMapPath控件,我把使用方法记录下来,以便日后查阅以及帮助新手朋友们. SiteMapPath”会显示一个导航路径(也称为痕迹导航或眉毛导航),此路径为用户显示当前 ...

  8. Android课程---简单的音乐播放器

    第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...

  9. perl 遍历对象数组

    my $appsList ; eval { $appsList = $db->query( $sqlstr1 )->hashes->to_array; }; ### $appsLis ...

  10. PHPCMS与UCenter整合要点

    要点一: PHPCMS不能直接与UCenter整合,而是要经过 PHPSSO 适配,因此应用主URL应是 http://phpcms_url/phpsso_server 这种模式的. 要点二: 因为 ...