一月之前,工作室师兄给我们介绍博客,然后试着去申请了一个,一直不晓得更新什么,直到今天,才有了一点小想法。最近在做一个小网站,然后就在登录那一块犯愁了,止步不前。
以前对登录一直没有什么概念,以为登录就是一道门槛,是网络世界已经设置好了的,就像一座城,登录了就像进了城一样。但是这两天才比较深刻的认识到,网络世界其实并没有那么神奇,所谓登录,就是拿一张票给你,然后你每次想进做点事的时候,就检查一下你的票,看你有没有资格。所以现在才完全对登录有了一个正确的印象。
那ASP.Net MVC 对这个做得很好,那就是每个方法都可以直接打一个标签就完事了。然后你再设定自己检查失败要导向的页面。
那么就来说一说那张票长的什么样子吧。
1 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 2 1, //版本 3 Context.User.Identity.Name, //登陆时候存入的标识用户的用户名 4 DateTime.Now, // 发布时间 5 DateTime.Now.AddHours(1), // 过期时间 6 false, // 是否持久 7 roleStr // 角色字符串 8 );
Ticket
没错,就是这样的。
然后程序是这样写的。
1 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket( 2 1, 3 logined.First().Id.ToString(), 4 DateTime.Now, 5 DateTime.Now.AddMinutes(30), 6 false, 7 role 8 ); 9 string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 10 System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 11 System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);
Login Code
这里还有一点值得注意的就是 User.Identity.Name,这个以前在其他的程序中看到过,然而并不知道是干什么的。这里看来就是UserName。所以就可以把邮箱直接放进去了,然后在程序中很轻松就可以拿到邮箱了。var email = User.Identity.Name;
然后还有一个角色roles,这里就可以放入角色,比如管理员或者普通人,那样在方法或者是控制器上打标签[Authorize(Roles = "Admin")]的时候就方便多了。
还说一点就是在程序中怎么获取roles
1 var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 2 var ticket = FormsAuthentication.Decrypt(cookie.Value); 3 string role = ticket.UserData;
Get cookie code
然后Roles还要单独设置,这个有点麻烦。详见http://www.cnblogs.com/dedeyi/p/3424979.html
这里仅作参考
1 public Global() 2 { 3 AuthorizeRequest += new EventHandler(MvcApplication_AuthorizeRequest); 4 } 5 6 void MvcApplication_AuthorizeRequest(object sender, EventArgs e) 7 { 8 var id = Context.User.Identity as FormsIdentity; 9 if (id != null && id.IsAuthenticated) 10 { 11 var roles = id.Ticket.UserData.Split(‘,‘); 12 Context.User = new GenericPrincipal(id, roles); 13 } 14 }
Roles Code
还有记得在web.config中的system节点下添加
1 <authentication mode="Forms"> 2 <forms loginUrl="~/Login/Index" timeout="2880" /> 3 </authentication>
就写到这里,洗澡去了。
时间: 2024-10-14 03:26:55