none
ASP.NET MVC环境下利用Froms窗体认证失败的问题!! RRS feed

  • 问题

  • 利用Visual Studio 2010搭建了ASP.NET MVC 2 的开发环境,想利用MVC的Filter功能和Asp.Net的Forms窗体认证来实现简单的登录认证,部分代码如下:

    AuFilter:

    1 publicclass AuFilter: ActionFilterAttribute
    2 {
    3 publicoverridevoid OnActionExecuting(ActionExecutingContext filterContext)
    4
    5 {
    6 if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
    7 {
    8 filterContext.Result =new RedirectToRouteResult("Default", new RouteValueDictionary(new { controller ="Account", action ="Login" }));
    9
    10 }
    11 }
    12
    13 }

    HomeController:

    1 publicclass HomeController : Controller
    2 {
    3 //
    4 // GET: /Home/
    5  
    6 [AuFilter]
    7 public ActionResult Index()
    8 {
    9 ViewData["UserState"] = HttpContext.User.Identity.IsAuthenticated.ToString();
    10 return View();
    11 }
    12
    13 public ActionResult About()
    14 {
    15 ViewData["UserState"] = HttpContext.User.Identity.IsAuthenticated.ToString();
    16 return View();
    17 }
    18
    19 }

    AccountController:

    1 public ActionResult DoLogin()
    2 {
    3 SiteUser UserInfo =new SiteUser();//实例化SiteUser类。
    4  
    5 UserInfo.UserName = Request["UserName"];
    6 UserInfo.PassWord = Request["PassWord"];
    7
    8 if (UserInfo.UserName =="aa"&& UserInfo.PassWord =="bb")
    9 {
    10 //处理认证的代码,先后使用过三种代码,代码见下面。
    11 }
    12 return RedirectToAction("Index","Home");
    13
    14 }

    问题在于,我先后利用FormsAuthentication.SetAuthCookie,FormsAuthentication.RedirectFromLoginPage,FormsAuthenticationTicket三种认证方式,均无法通过认证,无法写入Cookie,因为我在About.aspx页面设置了用ViewData["UserName"] = HttpContext.User.Identity.IsAuthenticated.ToString();的方式取到的值都是False。

    1)FormsAuthentication.SetAuthCookie

     

    1 FormsAuthentication.SetAuthCookie(UserInfo.UserName, false, FormsAuthentication.FormsCookiePath);

    2)FormsAuthentication.RedirectFromLoginPage

     

     

    1 FormsAuthentication.RedirectFromLoginPage(UserInfo.UserName, false);

    3)FormsAuthenticationTicket

     

     

    1 ////创建身份验证票
    2   FormsAuthenticationTicket AuTicket =new FormsAuthenticationTicket(
    3 1, UserInfo.UserName, DateTime.Now, DateTime.Now.AddMinutes(30),
    4 false, Request.UserHostAddress);
    5 ////将票据加密
    6  string authTicket = FormsAuthentication.Encrypt(AuTicket);
    7 ////将加密后的票据保存为cookie
    8 HttpCookie coo =new HttpCookie(FormsAuthentication.FormsCookieName, authTicket);
    9 coo.Secure =false;
    10 coo.Expires = AuTicket.Expiration;
    11 coo.Path = FormsAuthentication.FormsCookiePath;
    12 ////加入新cookie
    13 Response.Cookies.Add(coo);

    第1种和第3中方式,点击登录以后,回到Account/Login,不能转到Home/Index,说明没有通过认证,访问Home/About,也显示IsAuthenticated值为False。

    第2种方式,点击登录后,转到Home/Index,Index页面的IsAuthenticated值为True,但是再转到任何一个页面以后,IsAuthenticated值立刻变为False,包括Index页面本身。

    请教各位前辈,这到底是怎么回事呢?请帮帮我,谢谢了。

    2011年3月16日 6:34

答案

全部回复