asp.net mvc 登陆实现

---恢复内容开始---

asp.net mvc5 登陆及用户身份管理(基础)

近期再写asp.net的网站其中有部分网页需要拥有特权的人才能访问(admin),所以研究如何可以实现用户身份管理。

因为我一开始创建的项目是一个空项目,添加文件夹及核心引用勾选的是mvc所以出现了不能使用Authorize特性登陆;

于是新建了一个项目并且选择了身份验证为个人用户账户。对比发现可能是因为少了startup.auth.cs文件所致。

下面这段代码是我写的登陆代码

 1 [HttpGet]
 2         public ActionResult login()
 3         {
 4             return View();
 5         }
 6         [HttpPost]
 7         [ValidateAntiForgeryToken]
 8         public ActionResult login(Login login)
 9         {
10             var users = db.Users.Where(a => a.Name == login.UserName);
11             if (!users.Any())
12                 return View();
13             User user = users.First();
14             var cards = db.Cards.Where(a => a.User_id == user.Id);
15             Card card = cards.First();
16             if(login.Password=="123"&&card.Privilege==2)
17             {
18                 FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(
19                     1,
20                     login.UserName,
21                     DateTime.Now,
22                     DateTime.Now.AddMinutes(20),
23                     false,
24                     "admin"
25                    );
26                 var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(Ticket));
27                 cookie.HttpOnly = true;
28                 HttpContext.Response.Cookies.Add(cookie);
29                 return RedirectToAction("../DataBase/SelectUser");
30             }
31             return RedirectToAction("login");
32
33         }

其中FormsAuthenticationTicket为加密票据,用于存放用户的信息,其中“admin”为用户的权限,用于之后控制器中Authorize(Roles="admin")特征。

接下来是要限制权限的控制器

 1     public class DataBaseController : Controller
 2     {
 3
 4         private AccessControlContext db = new AccessControlContext();
 5         //Users
 6         public ActionResult SelectUser()
 7         {
 8             var user = db.Users;
 9             return View(user.ToList());
10         }
11         [HttpGet]
12         [Authorize(Roles = "admin")]
13         public ActionResult InsertUser()
14         {
15             return View();
16         }
17   }

其中标有[Authorize(Roles="admin"]标志的就是只有拥有admin权限的用户才能使用。当然也可以将AuthorizeAttribute注册为全局过滤器,需要把它添加到RegisterGlobalFilters(包含在\App_Start\FilterConfig.cs文件中)

        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new System.Web.Mvc.AuthorizeAttribute());
        }

然后在需要外部访问的方法前面用[AllowAnonymous]特性装饰即可。

如果用户身份验证失败,一般我们会选择将用户重定向到登陆界面。以便对有权查看原来页面的用户进行身份验证。

在asp.net以前的版本,这个重定向被FormsAuthenticationModule的OnLeave方法截获,并转而重定向到在应用程序web.config文件中定义的登陆页面,代码如下

1 <authentication mode="Forms">
2        <forms loginUrl="~/Account/Login" timeout="2880" />
3 </authentication>

但是在mvc5中我们可以直接更改Stratup.auth.cs中的代码

app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    // 当用户登录时使应用程序可以验证安全戳。
                    // 这是一项安全功能,当你更改密码或者向帐户添加外部登录名时,将使用此功能。
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });      

上面这段代码中LoginPath这个变量就是指向我们的登陆页面,我们可以更改后面的“/Account/Login”来更改指向。Startup.Auth.cs文件我也不是很清楚,后续我应该还会针对此文件来更新文章。

然后是登陆view的代码

 1 @model Access_Control_System.Models.Login
 2 @{
 3     ViewBag.Title = "View";
 4 }
 5
 6 <h2>Login</h2>
 7
 8 @using (Html.BeginForm())
 9 {
10     @Html.AntiForgeryToken();
11     @Html.ValidationSummary(true,"",new { @class="text-danger"})
12     <fieldset class="form-horizontal">
13         <div class="form-group">
14             @Html.LabelFor(model=>model.UserName,htmlAttributes:new {@class="control-label col-md-2"})
15             <div class="col-md-10">
16                 @Html.EditorFor(model=>model.UserName,new { htmlAttributes=new { @class="form-control"} })
17                 @Html.ValidationMessageFor(model=>model.UserName,"",new {@class="text-danger"})
18             </div>
19         </div>
20         <div class="form-group">
21             @Html.LabelFor(model=>model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
22             <div class="col-md-10">
23                 @Html.EditorFor(model=>model.Password,new { htmlAttributes=new { @class="form-control"} })
24                 @Html.ValidationMessageFor(model=>model.UserName,"",new { @class="text-danger"})
25             </div>
26         </div>
27
28
29         <div class="form-group">
30             <div class="col-md-offset-2 col-md-10">
31                 <input type="submit" value="Submit" class="btn btn-default" />
32             </div>
33         </div>
34
35     </fieldset>
36
37 }
时间: 2024-08-11 01:34:31

asp.net mvc 登陆实现的相关文章

asp.net mvc 登陆及用户角色验证

使用asp.net mvc 实现登陆及角色验证. 我最进想要实现对网站登陆者的权限管理问题,不同角色的用户访问页面收到权限的限制.然而因为建立的是空项目,所以只能手动实现角色管理的功能. 基本的思想就是重载AuthorizeAttribute特性标签,让重载的类继承ActioFilterAttribute类来实现个性的角色验证标签. 而登陆controller的书写主要就是从数据库中查出用户信息并把登陆信息用ticket加密保存在cookie里. 下面这段代码是登陆的控制器代码 namespac

asp.net MVC 常见安全问题及解决方案

asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为"one click attack"或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用) 详细说明: http://imroot.diandian.com/post/2010-11-21/40031442584 Example :            在登陆状态下进入了攻击网站向安全站点发送了请求. Solut

ASP.NET MVC+JQueryEasyUI1.4+ADO.NET Demo

1.JQueryEasyUI使用 JQuery EasyUI中文官网:http://www.jeasyui.net/ JQuery EasyUI中文官网下载地址:http://www.jeasyui.net/download/ jQuery EasyUI 1.4 版 API 中文版: 链接:http://pan.baidu.com/s/1c1pAutE%20 密码:0mk8 JQuery EasyUI 1.4.4 百度云盘:链接:http://pan.baidu.com/s/1bnRpH3T 密

Action Filters for ASP.NET MVC

本文主要介绍ASP.NET MVC中的Action Filters,并通过举例来呈现其实际应用. Action Filters 可以作为一个应用,作用到controller action (或整个controller action中),以改变action的行为. ASP.NET MVC Framework支持四种不同类型的Filter: Authorization filters – 实现IAuthorizationFilter接口的属性. Action filters – 实现IActionF

图文详解远程部署ASP.NET MVC 5项目

原文:图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手,还望大虾勿喷,有什么问题,还望高手指点. 一.本文实验环境: Windows Server 2012 R2 SQL Server 2012 Express Visual Studio 2013 项目为:ASP.NET MVC 5.0,使用的是L

在 docker中 运行 mono /jexus server 并部署asp.net mvc站点

http://linuxdot.net/bbsfile-3988 1.  安装 docker:      // docker 1.7 新版 安装非常容易,理论上说,在主流的任意linux发行版上都可以直接安装.    wget -qO- https://get.docker.com/ | sh 2. 重启你的宿主机,可选.    reboot 3.拉取已经内建了mono 和jexus 服务器的 docker镜像, 此镜像基于 官方 ubuntu:14.04.2 版本构建,dockerfile 在

全网最全ASP.NET MVC 教程汇总

全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp.NET MVC 框架知识,Let’s go! 1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MV

ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件

Bootstrap为我们提供了十几种的可复用组件,包括字体图标.下拉菜单.导航.警告框.弹出框.输入框组等.在你的Web Application中使用这些组件,将为用户提供一致和简单易用的用户体验. Bootstrap组件本质上是结合了各种现有Bootstrap元素以及添加了一些独特Class来实现.Bootstrap元素我在上一篇文章中涉及到,具体可以参考<ASP.NET MVC使用Bootstrap系列(2)——使用Bootstrap CSS和HTML元素>. 在这篇博客中,我将继续探索B

BrnShop开源网上商城第二讲:ASP.NET MVC框架

在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一次请求,程序都要分成好几个阶段执行,例如验证,执行动作方法等等,在各个阶段我们可能需要重复使用同一信息,而我们的愿景就是希望此信息只需获取一次,然后沿着流程管道一直流动,这样在后面的阶段中就可以直接使用,不用再重新获取了,提高程序的性能.举例来说:在授权验证阶段,我们为对用户进行验证,从而获取了用户