上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用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. 【BZOJ1415】 [Noi2005]聪聪和可可 概率与期望

    其实题不难,不知提交了几次...不能代码MD...注意一些基本问题...SB概率题 #include <iostream> #include <cstdio> #include ...

  2. 基于webpack和vue.js搭建开发环境

    前言 在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己.秉承着“不听老人言,吃亏在眼前”的优良作风,我还是决定玩火自焚. ...

  3. js中自定义构造函数讲解

    什么是构造函数? 构造函数其实就是一个函数,只是用途和普通函数,不太一样, 构造函数一般用于初始化对象 <script> function Person(){ this.name=&quo ...

  4. 使用spring的@Scheduled注解执行定时任务,启动项目不输出警告

    在applicationContext.xml中添加: xmlns:task="http://www.springframework.org/schema/task" xsi:sc ...

  5. AMD&CommonJS

    最近在学习nodejs的KOA框架,在查资料的时候遇见了点问题,顺着信息一步一步找下去,让我了解了一下一直以来不是很明白的什么时候用AMD规范,什么时候用CommonJS规范问题. CommonJS一 ...

  6. label 多行显示自适应高度

    //项目中显示 地址:XXXXXXX换行  UILabel *numLable = [[UILabel alloc] initWithFrame:CGRectMake(80, 50, 40, 20)] ...

  7. 初学者-PHP笔记

    PHP介绍 PHP 是 "PHP Hypertext Preprocessor" 的首字母缩略词 PHP 是一种被广泛使用的开源脚本语言 PHP 脚本在服务器上执行 PHP 没有成 ...

  8. iOS app上架需要提前准备的东西

    APP icon,要求1024*1024并且不能有圆角效果. 不同屏幕的截图 3.5的,4的,4.7的,5.5的 测试账号,即登录的账号密码(不能删除或更改的) 联系人电话,电子邮件 对项目的描述 关 ...

  9. Insert or Merge && Insertion or Heap Sort

    原题连接:https://pta.patest.cn/pta/test/1342/exam/4/question/27102 题目如下: According to Wikipedia: Inserti ...

  10. angular学习之路(一)

    angular是什么? angular是一个用于设计动态web应用的结构框架! 它不仅仅是一个JavaScript框架,他的核心其实是对HTML标签的增强. 何为HTML标签的增强?其实就是使用标签完 ...