上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用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,该方法只有验证失败时才会执行,这里用来在验证跳转到管理员登录界面。代码如下:

using System.Web;
using System.Web.Mvc; namespace Ninesky.Website.Areas.Config
{
/// <summary>
/// 管理员身份验证
/// <remarks>
///创建:2014年12月16日
/// </remarks>
/// </summary>
public class AdminAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool _pass = false;
if (httpContext.Session["Account"] != null) _pass = true;
return _pass;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("~/Config/Administrator/Login");
}
}
}

2、控制器加上验证属性

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

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

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

三、界面制作

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

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

@model Ninesky.Website.Areas.Config.Models.LoginViewModel

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>管理员登陆</title>
</head>
<body>
@Styles.Render("~/Content/bootstrap.css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap") @using (Html.BeginForm())
{
@Html.AntiForgeryToken() <div id="loginBox" class="panel panel-default" style="max-width:400px; margin:auto">
<div class="panel-heading"><h4>管理员登陆</h4></div>
<div class="panel-body">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Account, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Account, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Account, "", new { @class = "text-danger" })
</div>
</div> <div class="form-group">
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
</div>
</div> <div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="登陆" class="btn btn-default btn-block" />
</div>
</div>
</div>
</div>
} </body>
</html>
<script type="text/javascript">
$("#loginBox").css("margin-top", ($(window).height() - $("#loginBox").height()) / 2);
</script>

改好后的登录界面。

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

<!DOCTYPE html>
<html>
<head>
<title>网站管理 - @Page.Title</title>
@Styles.Render("~/Content/bootstrap.css")
@Styles.Render("~Areas/Config/Content/Style.css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("head", required: false)
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar" aria-expanded="true" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand">Ninesky</a>
</div>
<div id="navbar" class="navbar-collapse collapse" aria-expanded="true">
<ul class="nav navbar-nav">
<li class="active"><a href="#">桌面</a></li>
<li><a href="#">内容管理</a></li>
<li><a href="#">用户管理</a></li>
<li><a href="#">栏目管理</a></li>
<li><a href="#">网站设置</a></li>
</ul>
</div>
</div>
</nav>
@RenderBody()
<div class="navbar-fixed-bottom"> Copyright ©洞庭夕照 http://mzwhj.cnblogs.com</div>
</body>
</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. Python列表和元组

    Python是没有数组的概念,但是和数组比较相近的概念是列表和元素. 下面两个例子展示列表和元组. # coding=utf-8 # 元组 students = ('小明', '小黄', '小李', ...

  2. .net开源后可以查看的源代码

    通过此网站可以直接查询基于.net framework4.6的源码 也可以下载到本地通过VS 查看.

  3. ssm简单配置

    MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架. MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获. MyBatis 只使用简单的XML 和注解来配置和映射 ...

  4. QComboBox的activated与currentIndexChanged的区别

    void activated ( int index ) void activated ( const QString & text ) 信号activated是只要单击选择框即使所选内容选择 ...

  5. Hadoop_常用存储与压缩格式

    HDFS文件格式 file_format: TEXTFILE 默认格式 RCFILE hive 0.6.0 和以后的版本 ORC hive 0.11.0 和以后的版本 PARQUET hive 0.1 ...

  6. 打造AngularJs2.0开发环境

    angularjs2.0刚发布, typescript2.0也刚发布, 于2016.9.29记录. 参考文档:https://angular.cn/docs/ts/latest/quickstart. ...

  7. Hbuilder开发HTML5 APP之创建子页面

    折腾了好久,终于看明白怎么创建了: 1.创建个html5的mui页面,在其初始化方法中: mui.init({   subpages:[{    id:"list",   url: ...

  8. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  9. PostgreSQL配置优化

    硬件和系统配置 操作系统 Ubuntu13.04 系统位数 64 CPU Intel(R) Core(TM)2 Duo CPU 内存 4G 硬盘 Seagate ST2000DM001-1CH164 ...

  10. 使用jQuery Uploadify在ASP.NET 上传附件

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.Uploadify官方网址:http://www.uploadify.com/,在MVC中使用的方法可以参考 jQuer ...