zoukankan      html  css  js  c++  java
  • asp.net2.0安全性(4)--Login系列控件--转载来自车老师

     

    前面主要说了与安全相关的一系列的类,现在我们使用这些类就可以做出我们自己的安全系统了。其实微软的目的远不至于此,下面我们就来看一下微软为我们提供的Login系列控件。

    Login系列控件是微软为了简化我们的开发过程,为我们进行常规的安全开发提供块捷途径。

    Login系列控件包含下列控件:

    Login                           登录控件

    LoginName                   用于显示用户名的控件

    LoginStatus                  根据用户的登录状态显示不同的信息(登录,注销)

    LoginView                    根据登录状态的不同显示不同的模板

    CreateUserWizard          提供了一个注册用户账号的向导模板

    ChangePassword           更改密码

    PasswordRecovery        当忘记密码的时候用于取回密码

    以上几种控件的底层都与MembershipApi集成的,这几种控件之间是相互独立的,可以单独使用也可以搭配成一个较完整的安全管理。

    Login控件:

    登录界面,包含“用户名”、“密码”和登录按钮。

    属性:

           DestinationPageUrl        用户登录成功后转高的网页

           FailureAction                登录失败进行的操作,Refresh和RedirectToLoginPage两种操作

           RememberMeSet           设置“记住我”复选控。

           CreateUserUrl               注册用户帐号的页面

           HelpPageUrl                  说明页面的URL

           PasswordRecoveryUrl   密码恢复页面的URL

           Login控件提供了一系列的预定义的样式,可以从“智能菜单”中点击“自动套用格式...”进行选择。也可以选择“转换为模板”,自己设置要显示的样式。

           当你输入用户名和密码进行登录的时候,登录控件会自动去数据库中验证输入的用户名和密码。

    自定义Authentication事件处理:

           Login控件底层会使用Membership.Validate()和FormsAuthentication.RedirectFromLogin()方法进行验证,但有的时候我们己经有了现成的用户帐号和数据库的话,那如何做登录?

           protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)

        {

            string str = WebConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;

            SqlConnection conn = new SqlConnection(str);

            conn.Open();

            SqlCommand cmd = conn.CreateCommand();

            cmd.CommandText = "select count(*) from login where username = @u and password = @p";

            SqlParameter param;

            param = new SqlParameter("@u", Login1.UserName);

            cmd.Parameters.Add(param);

            param = new SqlParameter("@p",Login1.Password);

            cmd.Parameters.Add(param);

            int n = (int)cmd.ExecuteScalar();

            conn.Close();

            if (n > 0)

                e.Authenticated = true;

            else

                e.Authenticated = false;

    }

    自定义Login控件模板

    现有的Login控件可能显得太单调,如果你想自定义登录控件应当如何操作?单击智能标签“转换为模板”,这样就可以设置你自己的控件了。

    帐号的TextBox的id属性必须设置为:UserName

    密码的TextBox的id属性必须设置为:Password

    登录按钮的CommandName属性必须设为Login

    LoginName控件:

        把LoginName控件拖到界面中就可以完成了。

    LoginStatus控件:

        LoginStatus控件是个超链接,未登录的时候显示“登录”,登录以后显示“注销”,以提示用户登录或注销,其背后的运作原理是Request.IsAuthentication或User.Identity.IsAuthenticated作为判断依据。如果登录失败则转到Web.Config文件中指定的页面,如果登录成功则转到LoginStatus控件所在的网页。

        属性:

            LoginText:设置或获取登录文字

            LogoutText:设置或获取注销文字

            LoginImageUrl:设置登录超链的图片。

            LogoutImageUrl:设置注销超链的图片。

            LogoutAction:注销后的操作,Refresh、Redirect、RedirectToLoginPage

            LogoutPageUrl:如果LogoutAction属性设为Redirect,则注销后转到LogoutPageUrl所设置的网址

    LoginView控件:

        默认有两个模板:AnonymousTemplate和LoggedInTemplate,分别为匿名用户和登录后的两个模板,这样就可以为匿名用户和登录用户显示不同的界面了。

        另外LoginView控件还可以根据不同的角色创建不同的模板。选择智能标签的“编辑RoleGroups”可以添加新的模板,然后在视图中选择要编辑的角色模板就可以定义角色模板的样式了。

        注意:如果一个用户有多个角色的话,那么,当他登录后就会LoginView控件显示他的第一个角色所对应的模板,而不是显示他所有角色的模板。

    CreateUserWizard控件:

    CreateUserWizard控件提供了一个用户注册的界面,它是一个向导控件,可以自己套用样式,该控件说简单,它也简单,说复杂也真够复杂的。只所以说它简单,是因为当你只是创建简单的注册页面时,将它拖到页面上设置一下样式就可以使用了。要说它复杂呢,是因为它的灵活性太强了,你可以自定义模板,加入自己的一些用户个性化信息。这里我不想多说,它是一个向导控件,所以它的自定义功能,我会在以后的Wizard控件中详细说明。

    ChangePassword控件:

        ChangePassword控件就是一个用户更改密码的控件,但只允许通过身份验证的用户更改,并且要求输入原来的旧密码。

    PasswordRecovery控件:

        当用户忘记密码的时候可以通过系统的安全问题,若回答正确系统就会自动寄一封Email给该帐户的用户,里面附有密码。

        这种功能先决条件是你的网站要用SMTP服务设置

        在Web.Config中设置:

        <system.net>

            <mailSettings>

                <smtp from="grayworm@tom.com">

                    <network host="192.168.1.2" password="" userName="" />

                </smtp>

            </mailSettings>

    </system.net>

    或者:

    “网站”-“asp.net配置”,开asp.net web应用程序管理器,再选择“应用程序”-“配置SMTP电子邮件设置”,在新的页面中设置你的邮件内容就可以了。
    (车延禄)

    收藏于 2007-07-11

  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/ooip/p/4793812.html
Copyright © 2011-2022 走看看