MVC5 网站开发实践 2.2、管理员身份验证

上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用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

时间: 2024-10-07 06:30:09

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

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

目录 MVC5 网站开发实践  概述 MVC5 网站开发实践  1.建立项目 MVC5 网站开发实践  2.后台管理   1. 创建SHA256加密方法. 在Data项目中添加文件夹[Security],在文件夹中添加类 [Encryption],在类中写一个SHA256加密方法. using System; using System.Security.Cryptography; using System.Text; namespace Ninesky.Data.Security { /// <

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

目录 MVC5 网站开发实践 概述 MVC5 网站开发实践 1.建立项目   从这一部分开始做后台管理,首先是基本框架的 一.Data项目 1.项目添加EntityFramework引用 在Data项目的引用上右键-> 管理NuGet程序包. 在弹出的窗口中选择 EntityFramework 安装 2.添加排序枚举 在Data项目上点右键新建文件夹Type.在文件夹内添加类[OrderType],代码如下 //创建2014.12.8 namespace Data.Types { /// <s

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

目录 MVC5 网站开发实践 概述 一.建立项目 1.建立团队项目 在办公室和家里使用不同的电脑,为了方便代码的共享将项目建立为团队项目. 如图打开vs2013→新建→团队项目(图1),会自动打开Visual Studio Online页面(图2),输入微软通行证登录(没有账号去注册一个,免费),跳转到图3界面. 在图3界面输入项目名称和描述,点击Creatr project等待项目创建完成,完成后跳转到图4界面. 在图4中点击Open in Visual Studio,自动启动 vs,并显示团

ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

转自:http://www.cnblogs.com/mzwhj/p/3592895.html 上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东西没有理由不支持. 附件的上传同样基于KindEditor实现,可以上传图片,flash,影音,文件等. 目录 ASP.NET MVC5 网站开发实践 - 概述 ASP.NET MVC5 网站开发实践(一)

MVC5 网站开发实践 概述

用MVC网站的博客这是第三次写了,前两次都没写完. 第一次是用MVC4写的,整个一个项目很多代码混在一起非常不清晰,加上后来mvc5发布了,所以进行了第一次重写,这次把内容分了7个项目,设想了很多功能,后来Q群里很多朋友们提意见,认为项目分的太多了,做网站都不会这么所,摊子也铺的太大了,加上工作外调一年,反正最终是没写完,现在想来第三次写这么个东西了感到汗颜啊! 这次的目标定的是做一个非常简单的小网站,项目分的少一点,摊子铺的小一点,督促自己尽快完成. 以下是计划: 一.目标 简单小型的网站 二

ASP.NET MVC5 网站开发实践 - 开篇

偶然看到这样一篇文章<求知成瘾,却无作品>,看完有一种被老师点名却回答不上问题的难受感,自己现在的状态正是那样:关注和学习的东西太多太杂,却没有什么像样的作品出来.用文章中的话:当求知占用作品创作的精力,当用求知去填补作品创作的寂寞,原本的作品创作驱动求知变成了求知成瘾逃离作品创作.突然犹如芒刺在背,内心沉默... 全文如下: 激励是人学习的关键因素.可当知识本身成为求知的激励,你已求知成瘾,进入了好学的骗局. 求知瘾者的诞生 求知欲似乎是人们的本能,尤其「好学」这个词被定义成天生的褒义之后,

MVC5 网站开发之六 管理员功能之登录、验证和注销

上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能.   一.业务逻辑层 1.实现256散列加密方法. Ninesky.Core[右键]-> 添加->文件夹,输入文件夹名General. General文件夹[右键]->添加->类,输入类名Security. 引用System.Security.Cryptography命名空间(1),并实现SHA256静态加密方法. 2.Administrator模型类 Ninesky.Core[右

MVC5 网站开发之七 用户功能 1、角色的后台管理

角色是网站中都有的一个功能,用来区分用户的类型.划分用户的权限,这次实现角色列表浏览.角色添加.角色修改和角色删除. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网站开发之五 展示层架构 MVC5 网站开发之六 管理员 1.登录.验证和注销 MVC5 网站开发之六 管理员 2.添加.删除.重置密码.修改密码.列表浏览 MVC5 网站开发之七 用

MVC5 网站开发之八 栏目功能 添加、修改和删除

本次实现栏目的浏览.添加.修改和删除. 栏目一共有三种类型. 常规栏目-可以添加子栏目,也可以添加内容模型.当不选择内容模型时,不能添加内容. 单页栏目-栏目只有一个页面,可以设置视图. 链接栏目-栏目为一个链接,点击后转到相应链接. 在视图中原本栏目的树形显示插件使用Bootstrap TreeView 1.2.0(MVC5 网站开发之六 管理员 2.添加.删除.重置密码.修改密码.列表浏览),后来使用中发现zTree使用起来更习惯,所以更换成zTree了. 目录 MVC5网站开发之一 总体概