浅谈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认证的使用,具体的细节问题,大家可以参考园中的大神们的博文。

上一篇:C# 实例化接口对象


下一篇:java中使用数组和链表简单实现SJBMap