• CreateUserWizard控件的详细使用说明(3)


    1.3.4  自动生成密码

    有一部分网站在进行注册时候需要多个步骤。例如,要在eBay上注册一个新账号就必须要完成下列步骤:

    (1) 仔细填写完成用户注册表单;

    (2) 接收包含注册认证码的电子邮件;

    (3) 将认证码填入指定表单中进行确认。

    使用这样的注册方式可以检验用户输入的电子邮件地址是否有效。如果是无效的电子邮件地址,他就不能接收到注册认证码。

    要实现这样的注册方案,就必须了解CreateUserWizard控件的下列三个属性:

    q AutoGeneratePassword——用于指定控件是否自动产生新密码;

    q DisableCreatedUser——用于禁止通过控件创建新用户账号;

    q LoginCreateUser——用于在自动登录中保护新用户。

    同时还可以发送两种类型的注册确认电子邮件通知。其一,可以自动生成新密码并将该密码发送给进行注册的用户。这种方式需要启用控件的AutoGeneratePassword属性,同时禁用其LoginCreateUser属性。

    另外一种是让用户自己输入密码,然后在电子邮件的确认通知中发送特别的认证码。而这需要启用控件的DisableCreatedUser属性,并同时禁用LoginCreateUser属性。下面让我们分别对这些方案进行试验。

    代码清单1-21中的页面包含了CreateUserWizard控件,但该控件并不输出密码表单项。该控件启用了AutoGeneratePassword属性,同时禁用了LoginCreateUser属性。在填写完成由CreateUserWizard控件输出的用户注册表单后,点击Continue按钮将会打开页面Login.aspx。

    代码清单1-21  CreateUserWizardPasswordConfirmation.aspx

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head id="Head1" runat="server">

        <title>CreateUserWizard Password Confirmation</title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

        <asp:CreateUserWizard

            id="CreateUserWizard1"

            CompleteSuccessText="A confirmation email

                containing your new password has been

                sent to your email address."   

            AutoGeneratePassword="true"

            LoginCreatedUser="false"

            ContinueDestinationPageUrl="~/Login.aspx"

            Runat="server">

            <MailDefinition

                From="Admin@YourSite.com"

                BodyFileName="PasswordConfirmation.htm"

                IsBodyHtml="true"

                Subject="Registration Confirmation" />

        </asp:CreateUserWizard>

        </div>

        </form>

    </body>

    </html>

    注意   在启用了CreateUserWizard控件自动生成密码功能后,请不要再设置Membership接口提供器的passwordStrengthRegularExpression属性。

    代码清单1-21中的CreateUserWizard控件发送的电子邮件通知将会包含代码清单1-22中的内容。

    代码清单1-22  PasswordConfirmation.htm

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head>

        <title>Password Confirmation</title>

    </head>

    <body>

        Your new password is <% Password %>.

    </body>

    </html>

    代码清单1-22中的电子邮件通知中包含了自动生成的密码。当新用户收到了自动生成的用户密码后,便可以在应用程序的Login.aspx页面中输入该密码进行登录。

    在另一种使用场景中,用户可以自己选择密码。然而,该用户的账号在其输入注册验证码进行确认前是不能使用的。

    代码清单1-23中的CreateUserWizard控件启用了其DisableCreateUser属性,并同时禁用了LoginCreateUser属性。

    代码清单1-23  CreateUserWizardCodeConfirmation.aspx

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">

        protected void CreateUserWizard1_SendingMail(object sender, MailMessageEventArgs e)

        {

            MembershipUser user = Membership.GetUser(CreateUserWizard1.UserName);

            string code = user.ProviderUserKey.ToString();

            e.Message.Body = e.Message.Body.Replace("<%ConfirmationCode%>", code);

        }

    </script>

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head id="Head1" runat="server">

        <title>CreateUserWizard Code Confirmation</title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

        <asp:CreateUserWizard

            id="CreateUserWizard1"

            CompleteSuccessText="A confirmation email

                containing your new password has been

                sent to your email address."   

            DisableCreatedUser="true"

            ContinueDestinationPageUrl="~/ConfirmCode.aspx"

            OnSendingMail="CreateUserWizard1_SendingMail"

            Runat="server">

            <MailDefinition

                From="Admin@YourSite.com"

                BodyFileName="CodeConfirmation.htm"

                IsBodyHtml="true"

                Subject="Registration Confirmation" />

        </asp:CreateUserWizard>

        </div>

        </form>

    </body>

    </html>

    需要注意的是,代码清单1-23中的页面包含了一个SendingMail事件处理函数。注册验证码是通过Membership接口提供器关联到每个新用户上的唯一键值(本示例中使用的是GUID)。该验证码在电子邮件通知发送前将输入到电子邮件中。该电子邮件通知的内容包含在代码清单1-24中。

    代码清单1-24  CodeConfirmation.htm

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head>

        <title>Code Confirmation</title>

    </head>

    <body>

    <%UserName%>,

    your confirmation code is <%ConfirmationCode%>

    </body>

    </html>

    在填写完CreateUserWizard控件输出的表单后,便可以通过点击Continue按钮来打开页面ConfirmCode.aspx(见图1-9)。

    图1-9  输入验证码

    代码清单1-25  ConfirmCode.aspx

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">

        protected void btnConfirm_Click(object sender, EventArgs e)

        {

            MembershipUser user = Membership.GetUser(txtUserName.Text);

            if (user == null)

            {

                lblError.Text = "Invalid User Name";

            }

            else

            {

                string providerCode = user.ProviderUserKey.ToString();

                string userCode = txtConfirmationCode.Text.Trim();

                if (providerCode != userCode)

                {

                    lblError.Text = "Invalid Confirmation Code";

                }

                else

                {

                    user.IsApproved = true;

                    Membership.UpdateUser(user);

                    Response.Redirect("~/SecretFiles/Secret.aspx");

                }

            }

        }

    </script>

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head id="Head1" runat="server">

        <title>Confirm Code</title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

        <p>

        Enter the confirmation code that you received by email.

        </p>

        <asp:Label

            id="lblError"

            EnableViewState="false"

            ForeColor="Red"

            Runat="server" />

        <br /><br />

        <asp:Label

            id="lblUserName"

            Text="User Name:"

            AssociatedControlID="txtUserName"

            Runat="server" />

        <br />   

        <asp:TextBox

            id="txtUserName"

            Runat="server" />   

        <br /><br />

        <asp:Label

            id="lblConfirmationCode"

            Text="Confirmation Code:"

            AssociatedControlID="txtConfirmationCode"

            Runat="server" />

        <br />   

        <asp:TextBox

            id="txtConfirmationCode"

            Columns="50"

            Runat="server" />   

        <asp:Button

            id="btnConfirm"

            Text="Confirm"

            OnClick="btnConfirm_Click"

            Runat="server" />

        </div>

        </form>

    </body>

    </html>

    当用户在特定的表单中输入了正确的用户名和相应的认证码后,其账号将正式启用。MembershipUser.IsApproved属性需要设置为true,然后再使用Membership.UpdateUser()方法来保存更新的用户信息。

    From:

    http://rusti.blogbus.com/logs/38025640.html

  • 相关阅读:
    【Jmeter】分布式并发测试
    【博客迁移】
    设置超出范围有滚动条
    table中td,th不能设置margin
    文字和input对不齐怎么办
    改变radio单选按钮的样式
    transition的用法以及animation的用法
    选择后代元素或点击元素的方法
    如何简单实用hammer
    添加aimate动画
  • 原文地址:https://www.cnblogs.com/CodingPerfectWorld/p/1912447.html
Copyright © 2020-2023  润新知