浅谈MVC Form认证
简单的谈一下MVC的Form认证。
在做MVC项目时,用户登录认证需要选用Form认证时,我们该怎么做呢?下面我们来简单给大家说一下。
首先说一下步骤
1、用户登录时,如果校验用户名密码通过后,需要调用FormsAuthentication.SetAuthCookie()这个方法。
2、用户退出时,需要调用FormsAuthentication.SignOut();方法
3、在配置文件web.config中,system.web 节点下, 配置<authentication mode="Forms"/>
4、校验:HttpContext.User.Identity.IsAuthenticated,如果是false,则没有通过认证,如果是true,则通过了认证
以上这三部,即可完成用户登录的Form认证了。
好了,下面我们来看一下具体的代码。(View中的代码就不贴了,只贴Controller中的代码吧)
1、建立一个用于用户登录用的Model
public class LoginViewModel
{
[DisplayName("用户名")]
public string UserName { get; set; }
[DisplayName("密码")]
public string Password { get; set; }
}
2、建立登录用的Controller与页面,其中Controller里面有登录与退出两个Action
public class LoginController : Controller
{
// GET: Login
public ActionResult Index(LoginViewModel loginViewModel)
{
if (loginViewModel.UserName == "admin" && loginViewModel.Password == "")
{
FormsAuthentication.SetAuthCookie(loginViewModel.UserName, false);
return RedirectToAction("Index", "Main");
}
return View();
} //GET: LogOut
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Login");
}
}
3、建立一个登录后,用户跳转的页面与Controller
public class MainController : BaseController
{
// GET: Main
public ActionResult Index()
{
return View();
}
}
4、登陆后跳转的页面的Controller是继承的BaseController,那么BaseController是怎么写的呢?
public class BaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//登录认证处理
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
//未登录
Response.Redirect("~/Login/Index");
}
else
{
//已登录,Action级权限控制处理
var controllerName = filterContext.RouteData.Values["controller"].ToString();//控制器名称
var actionName = filterContext.RouteData.Values["action"].ToString(); //Action名称
//根据controllerName与actionName进行权限检查
/*
if()
{ }
else
{ }
*/
}
}
}
这个BaseController很简单,大体的作用就是,方式继承这个BaseController的控制器,当执行其下面的Action时,会进行Form校验,如果校验成功,则……,如果校验不成功则……,
登陆后的页面的Controller都会继承BaseController,这样,就不用在每个Controller中的Action重复的写Form认证的代码了。
是不是很简单?
当然,具体的细节问题这里都没有涉及到,这里只是简单的给大家介绍一下Form认证的使用,具体的细节问题,大家可以参考园中的大神们的博文。
浅谈MVC Form认证的更多相关文章
- 浅谈 MVC 和 MTV
浅谈 MVC 和 MTV 一.MVC M:model,模型,就是数据模型,负责数据的存取: V:view,视图,负责页面的展示逻辑: C:controller,控制器,负责业务逻辑的处理: 二.MTV ...
- 浅谈MVC、MVP、MVVM
MVC M: Model 模型——数据 (对于前台而言例如:ajax.jsonp等从后台获取数据的) V: View 视图——表现 ...
- Asp.net MVC Form认证,IIS改成集成模式后,FormsAuthentication.SetAuthCookie无效,Request.IsAuthenticated值,始终为false,页面提示HTTP 错误 401.0 - Unauthorized,您无权查看此目录或页面
最近公司领导要求,IIS网站要由经典模式改为集成模式,以提高性能.改完之后,登录成功跳转到主页之后,页面提示“”HTTP 错误 401.0 - Unauthorized“,“您无权查看此目录或页面”, ...
- 以用户注册功能模块为例浅谈MVC架构下的JavaWeb开发流程
JavaWeb应用开发,撇开分布式不谈,只讨论一个功能服务应用的开发,无论是使用原生的Servlet/JSP方案,还是时下的SSM架构,都有一套经过工程实践考验的最佳实践,这综合考虑了团队协作.项目管 ...
- 【转】浅谈MVC与三层架构
首先给大家引入下MVC的概念: MVC(Model View Controller)模型.视图以及控制器,它是一种较为广泛应用的结构设计模式. 模型:就是在MVC设计模式中需要被显示的数据.在通常情况 ...
- 浅谈MVC Razor基本语法
首先说下MVC,mvc已经不用ViewState来保留网页的状态,所以大部分依赖ViewState的功能都将无法使用, 比如gridview的分页与排序,page trace等利用viewstate记 ...
- 浅谈MVC和MVVM模式
MVC I’m dating with a model… and a view, and a controller. 众所周知,MVC 是开发客户端最经典的设计模式,iOS 开发也不例外,但是 MVC ...
- iOS 浅谈MVC设计模式及Controllers之间的传值方式
1.简述你对MVC的理解? MVC是一种架构设计.它考虑了三种对象:Model(模型对象).View(试图对象).Controller(试图控制器) (1)模型:负责存储.定义.操作数据 (2)视图: ...
- 浅谈MVC设计模式
摘要:MVC即Model.View.Controller即模型.视图.控制器,它是用一种业务逻辑.数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用 ...
随机推荐
- poj1182食物链,经典带权并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...
- 最大流算法之Dinic
引言: 在最大流(一)中我们讨论了关于EK算法的原理与代码实现,此文将讨论与EK算法同级别复杂度(O(N^2M))的算法--Dinic算法. Dinic算法用到的思想是图的分层结构,通过BFS将每一个 ...
- 关于使用命令添加jar进自己的pom文件中-maven项目添加jar包
现在几乎开发项目都是使用的maven项目,但是有的时候可以使用比较偏门或者新的jar可能在网上搜不到在pom文件里的配置应该如何写,因此写下这篇博客. 比如我现在想加入的AAA.jar这个包 打开cm ...
- innobackup增量备份与恢复
一.全备: innobackupex --user=root --password=123 /backup/all 全备之后,去数据库操作,创建新的对象或插入数据 二.完整备份目 ...
- 初识Celery
本系列文章的开发环境: window + python2. + pycharm5 + celery3.1.25 + django1.9.4 在我们日常的开发工作中,经常会遇到这几种情况: 1.在web ...
- ionic之$ionicHistory
$ionicHistory 定义:当用户通过导航栏切换视图页面的时候,ionicHistory起到跟踪视图的作用,类似的浏览器的行为方式,一个ionic应用程序能够保持以前的视图,当前视图,和前视图( ...
- GROUP BY语句与HAVING语句的使用
一.GROUP BY GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX.)联合使用来得到一个或多个列 ...
- mysql安装出现的问题
ERROR 1045 (28000): Access denied for user root@localhost (using password: NO) 错误描述: Mysql中添加用户之后可能出 ...
- CPU Affinity
Reference: [1] http://www.linuxjournal.com/article/6799 Soft vs. Hard CPU Affinity There are two typ ...
- 开涛spring3(3.1) - DI的配置使用
3.1.1 依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...