FineUI 官方论坛
标题: 对Appbox的表单身份验证模式的认识理解 [打印本页]
作者: szjazz 时间: 2014-2-18 20:30
标题: 对Appbox的表单身份验证模式的认识理解
本帖最后由 szjazz 于 2014-2-18 20:36 编辑
步骤一:设置验证模式及相关页面
在根目录下的web.config中加入:
- <font color="#333333"><font face="Verdana, Arial, Tahoma"><font style="font-size: 14px"><system.web>
- <authentication mode="Forms">
- <forms name=".ASPXFORMSAUTH" loginUrl="~/default.aspx" timeout="120" defaultUrl="~/main.aspx" protection="All" path="/" />
- </authentication>
- </system.web> </font></font></font>
复制代码
loginUrl:用户没有登录,跳转到的登录页面
defaultUrl:正确登录之后,在没有指向页的时候,弄人跳转的页面
步骤二:
拒绝匿名用户登录
- <font color="#333333"><font face="Verdana, Arial, Tahoma"><font style="font-size: 14px"><system.web>
- <!--拒绝匿名用户访问此目录下的任何文件-->
- <authorization>
- <deny users="?"/>
- </authorization>
- </system.web> </font></font></font>
复制代码
deny users="?":表示禁止匿名用户访问web.config所在目录下的任何文件,只要你访问,都会自动跳转到Login.aspx登陆页面了,要求你先登录,否则别想看到页面。
注:如果根目录下的Web.config有该段代码,则表示整个系统都要求身份认证,适合类似OA的系统,如果是设计网站,则可以在后台管理目录admin下建立一个web.config,且包含步骤二的代码段,则所有的管理页面都要求验证,而前台给访问者看的页面则不需要了
步骤三:登录页面
在根目录下,创建Login.aspx登陆页面(可不是在admin目录下哦),加两个textbox控件和一个botton控件,分别是用户名,密码,和登陆按钮
双击登陆按钮,在其登陆方法里写上:
- <font color="#333333"><font face="Verdana, Arial, Tahoma"><font style="font-size: 14px">protected void btn_Login_Click(object sender, EventArgs e)
- {
- if (TextBox1.Text == "admin" && TextBox2.Text == "fenghua17173")
- {
- //“通知”表单验证,该用户名已经通过身份验证
- FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, true);
- }
- else
- {
- Response.Write("<script>alert('账号或密码有误,登录失败!');</script>");
- }
- } </font></font></font>
复制代码 现在配置文件目录下的所有页面,均已通过身份验证,得到了可访问的票据。
另外,本登录页面也要判断是否已登录,如有,则直接跳转至指定的默认页面,该段代码一般放在Page_Load事件里
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- if (User.Identity.IsAuthenticated)
- Response.Redirect(FormsAuthentication.DefaultUrl);
- }
- }
复制代码
ok,这时你在login.aspx页面里填上账号密码,系统就会根据根你在根目录下web.config中配置的defaultUrl地址路径跳转过去。
步骤四:存储和获取验证用户的信息
一般情况下,验证通过后需要保留用户的信息,可以储存在Cookie:
- <font color="#000">/// <summary>
- /// 创建表单验证的票证并存储在客户端Cookie中
- /// </summary>
- /// <param name="userName">当前登录用户名</param>
- /// <param name="UserData">当前登录用户的信息数据,如:角色权限列表</param>
- /// <param name="isPersistent">是否跨浏览器会话保存票证</param>
- /// <param name="expiration">过期时间</param>
- protected void CreateFormsAuthenticationTicket(string userName, string UserData , bool isPersistent, DateTime expiration)
- {
- // 创建Forms身份验证票据
- FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
- userName, // 与票证关联的用户名
- DateTime.Now, // 票证发出时间
- expiration, // 票证过期时间
- isPersistent, // 如果票证将存储在持久性 Cookie 中(跨浏览器会话保存),则为 true;否则为 false。
- UserData // 存储在票证中的用户特定的数据
- );
- // 对Forms身份验证票据进行加密,然后保存到客户端Cookie中
- string hashTicket = FormsAuthentication.Encrypt(ticket);
- HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
- cookie.HttpOnly = true;
- // 1. 关闭浏览器即删除(Session Cookie):DateTime.MinValue
- // 2. 指定时间后删除:大于 DateTime.Now 的某个值
- // 3. 删除Cookie:小于 DateTime.Now 的某个值
- if (isPersistent)
- {
- cookie.Expires = expiration;
- }
- else
- {
- cookie.Expires = DateTime.MinValue;
- }
- Response.Cookies.Add(cookie);
- }</font>
复制代码
相应的,要取出储存的信息:
- <font color="#000"> /// <summary>
- /// 当前登录用户名
- /// </summary>
- /// <returns></returns>
- protected string GetIdentityName()
- {
- if (User.Identity.IsAuthenticated)
- {
- return User.Identity.Name;
- }
- return String.Empty;
- }</font>
复制代码
步骤五:退出系统,注销票证
最后一点:
有登陆,当然别忘了注销,这个更简单:
在目录下的任何一个页面中,加一个注销button按钮,并在其方法下写入:
- <font color="#333333"><font face="Verdana, Arial, Tahoma"><font style="font-size: 14px">//退出系统,注销用户
- protected void btn_Logout_Click(object sender, EventArgs e)
- {
- //删除用户票据
- FormsAuthentication.SignOut();
- //重新定向到登陆页面
- FormsAuthentication.RedirectToLoginPage();
-
- }</font></font></font>
复制代码
好了,你已经知道如何配置authentication,完成基于表单的身份验证了。
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) |
Powered by Discuz! X3.4 |