MVC授权认证
处于安全性考虑,MVC可以完成授权认证,授权认证的方式如下:
1、配置Config文件,设置登录页面:
<authentication mode="Forms">
<forms loginUrl="~/Authentication/Login" timeout="" />
<!--<forms cookieless="UseUri" loginUrl="~/Authentication/Login"></forms>-->
</authentication>
2、Action添加授权认证属性Authorize:
[Authorize]
public ActionResult Index()
{
EmployeeBusinessLayer empBal = new EmployeeBusinessLayer();
List<Employee> employees=empBal.GetEmployees();
List<EmployeeViewModel> empviewModels = new List<EmployeeViewModel>();
foreach (Employee emtp in employees)
{
EmployeeViewModel vmEmp = new EmployeeViewModel();
vmEmp.EmployeeName = emtp.FirstName + " " + emtp.LastName;
vmEmp.Salary = emtp.Salary.ToString("C");
if (emtp.Salary > )
{
vmEmp.SalaryColor = "yellow";
}
else
{
vmEmp.SalaryColor = "green";
}
empviewModels.Add(vmEmp);
} EmployeeListViewModel currlistmodel = new EmployeeListViewModel(); currlistmodel.UserName = User.Identity.Name;
currlistmodel.Employees = empviewModels;
return View(currlistmodel);
}
备注:显示当前用户信息,User.Identity.Name获取
3、设置授权认证。
FormsAuthentication.SetAuthCookie(udemail.UserName, false);//表示通过身份认证
FormsAuthentication.SignOut();//表示注销身份认证
Login页面代码如下:
@using MyMVC3Demo.Models;
@model UserDetails
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>Login</title>
<script src="../../Scripts/jquery-1.8.0.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
</head>
<body>
<div>
@Html.ValidationMessage("CredentialError", new { style = "color:red;" })
@using(Html.BeginForm("DoLogin","Authentication",FormMethod.Post))
{
@Html.LabelFor(c=>c.UserName)
@Html.TextBoxFor(x=>x.UserName)
@Html.ValidationMessageFor(x => x.UserName)
<br />
@Html.LabelFor(c => c.Password)
@Html.PasswordFor(c => c.Password)
<br />
<input type="submit" name="BtnSubmit" value="Login" />
}
</div>
</body>
</html>
备注1: @Html.TextBoxFor(x=>x.UserName)转换为HTML代码<input id="UserName" name="UserName" type="text" value="" />
2:@using (Html.BeginForm("DoLogin", "Authentication", FormMethod.Post)){ }
转换为HTML代码<form action="/Authentication/DoLogin" method="post"> </form>
Control代码如下:
public ActionResult Login()
{
return View();
} public ActionResult Logout()
{
FormsAuthentication.SignOut();
return RedirectToAction("Login");
} [HttpPost]
public ActionResult DoLogin(UserDetails udemail)
{
if (ModelState.IsValid)
{
EmployeeBusinessLayer bll = new EmployeeBusinessLayer();
if (bll.IsValidUser(udemail))
{
FormsAuthentication.SetAuthCookie(udemail.UserName, false);
return RedirectToAction("Index", "Employee");
}
else
{
ModelState.AddModelError("CredentialError", "Invalid Username or Password");
return View("Login");
}
}
else {
return View("Login");
}
}
ModelState.IsValid是对Model类型的校验;
ModelState.AddModelError(),自定义错误类型,便于前台显示;
@Html.ValidationMessage("CredentialError", new { style = "color:red;" })
补充:
用客户端显示错误信息
1、选择“Manage Nuget packages”,点击在线查找”jQuery Unobtrusive“,安装”Microsoft jQuery Unobtrusive Valiadtion“
2、引用一下JS
- jQuery-Someversion.js
- jQuery.valiadte.js
- jquery.validate.unobtrusive
3、利用Unobtrusive展示错误消息的主要原因在HtmlHelp类能够将
@Html.TextBoxFor(x=>x.UserName)
@Html.ValidationMessageFor(x=>x.UserName)
转换成
<input data-val="true" data-val-length="UserName length should be between 2 and 7" data-val-length-max="7" data-val-length-min="2" id="UserName" name="UserName" type="text" value="" />
<span class="field-validation-error" data-valmsg-for="UserName" data-valmsg-replace="true"> </span>
而data-val-length又是Unbtrusive内置的数据属性,所以能够利用前端拦截错误信息
MVC授权认证的更多相关文章
- 七天学会ASP.NET MVC (四)——用户授权认证问题
小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在第四天的学习中,我们主要了学习如何在MVC中如何实现认证授权等问题,本节主要讲了验证错误时的错误值,客户端验 ...
- 七天学会ASP.NET MVC (四)——用户授权认证问题 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_four.html 小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在 ...
- Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
- 使用微服务架构思想,设计部署OAuth2.0授权认证框架
1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...
- API代理网关和OAuth2.0授权认证框架
API代理网关和OAuth2.0授权认证框架 https://www.cnblogs.com/bluedoctor/p/8967951.html 1,授权认证与微服务架构 1.1,由不同团队合作引发的 ...
- 授权认证(IdentityServer4)
区别 OpenId: Authentication :认证 Oauth: Aurhorize :授权 输入账号密码,QQ确认输入了正确的账号密码可以登录 --->认证 下面需要勾选的复选框(获取 ...
- 你还不了解基于session的授权认证吗?
前言 在漫长的开发过程中,权限认证是一个永恒不变的话题,随着技术的发展,从以前的基于sessionId的方式,变为如今的token方式.session常用于单体应用,后来由于微服务的兴起,分布式应用占 ...
- IOS第三天-新浪微博 - 版本新特性,OAuth授权认证
*********版本新特性 #import "HWNewfeatureViewController.h" #import "HWTabBarViewController ...
- Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制
之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...
随机推荐
- Linux system 函数的一些注意事项
在日常的代码编程中 , 我们可以利用system 函数去调用一些我们自己想调用的命令 , 并获取他的返回值. 函数的原型如下: int system(const char *command); 上一 ...
- Codeforces Gym 101138 D. Strange Queries
Description 给你一下长度为 \(n\) 的序列. \(a_i=a_j\) \(l_1 \leqslant i \leqslant r_1\) \(l_2 \leqslant i \leqs ...
- mysql+mybatis+存储过程+事务 + 多并发流水号获取
数据库存储过程 drop PROCEDURE generate_serial_number; CREATE PROCEDURE generate_serial_number( ), IN param_ ...
- Maven打包排除不需要的文件。
pom.xml <!-- package打包排除掉一些配置文件 --> <plugin> <groupId>org.apache.maven.plugins< ...
- stty命令使用
stty [ -a ] [ -g ] [ Options ] stty(set tty)命令用于显示和修改当前注册的终端的属性. UNIX系统为键盘的输入和终端的输出提供了重要的控制手段,可以通过 ...
- aspx、ashx、asmx文件处理请求效率比较
人生总是面临着许多抉择许多困惑!作为一名“攻城师”或“程序猿”的我们,工作的时候更是如此.你曾经是否苦恼过在系统中使用哪种文件编写客户端请求最合适或最高效呢?aspx.ashx.asmx到底该如何选择 ...
- Angularjs与bootstrap.datetimepicker结合实现日期选择器
http://www.lovelucy.info/angularjs-best-practices.html http://damoqiongqiu.iteye.com/blog/1917971 ht ...
- js 为label标签和div标签赋值
<label id="ttile"></label> document.getElementById('ttile').innerText="&q ...
- sharepoint2010匿名访问
怎样在SharePoint 2010网站中启用匿名访问 SharePoint 2010的改动比较大,尤其是相对SharePoint Portal Server 2003来说.本文介绍在SharePoi ...
- 【leetcode】Unique Binary Search Trees
Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...