• 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

  • 相关阅读:
    利用Continuous Testing实现Eclipse环境自动单元测试
    GWT-Dev-Plugin(即google web toolkit developer plugin)for Chrome的安装方法
    在SQL Server 2012中实现CDC for Oracle
    在SSIS 2012中使用CDC(数据变更捕获)
    SQL Server Data Tools – Business Intelligence for Visual Studio 2012安装时提示“The CPU architecture....”的解决方法
    SQL Server 2012新特性(1)T-SQL操作FileTable目录实例
    RHEL每天定时备份Oracle
    GWT-Dev-Plugin(即google web toolkit developer plugin)for firefox的下载地址
    Oracle中修改表名遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”
    Oracle中序列(SEQUENCE)的使用一例
  • 原文地址:https://www.cnblogs.com/ooip/p/4793812.html
Copyright © 2020-2023  润新知