ptg 1184 CHAPTER 26 Using the Login Controls LISTING 26.28 ShowLoginStatus.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>Show LoginStatus</title> </head> <body> <form id=”form1” runat=”server”> <div> <asp:LoginStatus id=”LoginStatus1” Runat=”server” /> <hr /> Additional information is available to registered users. Log in to view the additional information. </div> </form> </body> </html> After you open the page in Listing 26.28, if you click the Login link, you are redirected to the Login page. If you enter a valid username and password, you are redirected back to the ShowLoginStatus.aspx page. The LoginStatus control supports the following properties: . LoginImageUrl—Enables you to specify an image for the Login link. . LoginText—Enables you to specify the text for the Login link. . LogoutAction—Enables you to control what happens when the Logout link is clicked. Possible values are Redirect, RedirectToLoginPage, and Refresh. . LogoutImageUrl—Enables you to specify an image for the Logout link. . LogoutPageUrl—Enables you to specify a page to which the user is redirected when the user logs out. This property is ignored unless the LogoutAction property is set to the value Redirect. . LogoutText—Enables you to specify the text for the Logout link. From the Library of Wow! eBook ptg 1185 Using the LoginName Control 26 The LoginStatus control also supports the following two events: . LoggingOut—Raised before the user is logged out. . LoggedOut—Raised after the user is logged out. Using the LoginName Control The LoginName control displays the current user’s registered username. If the current user is not authenticated, the LoginName control renders nothing. The page in Listing 26.29 contains both a LoginName and LoginStatus control. LISTING 26.29 ShowLoginName.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>Show LoginName</title> </head> <body> <form id=”form1” runat=”server”> <div> <asp:LoginName id=”LoginName1” FormatString=”{0} /” Runat=”server” /> <asp:LoginStatus id=”LoginStatus1” Runat=”server” /> <hr /> Additional information is available to registered users. Log in to view the additional information. </div> </form> </body> </html> From the Library of Wow! eBook ptg 1186 CHAPTER 26 Using the Login Controls FIGURE 26.12 Displaying the current username with the LoginName control. When you first open the page in Listing 26.29, the LoginName control displays nothing. However, if you login by clicking the Login link, the LoginName control displays your user- name (see Figure 26.12). The LoginName control supports the following property: . FormatString—Enables you to format the username when the username is rendered. Using the ChangePassword Control The ChangePassword control enables a user (or administrator) to change a user password. The page in Listing 26.30 illustrates how you can use this control. LISTING 26.30 ShowChangePassword.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”> <style type=”text/css”> .changePassword From the Library of Wow! eBook ptg 1187 Using the ChangePassword Control 26 { font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .changePassword_title { background-color:darkblue; color:white; font-weight:bold; } .changePassword_instructions { font-size:12px; text-align:left; padding:10px; } .changePassword_button { border:solid 1px black; padding:3px; } </style> <title>Show ChangePassword</title> </head> <body> <form id=”form1” runat=”server”> <div> <asp:LoginName ID=”LoginName1” runat=”server” /> <asp:ChangePassword id=”ChangePassword1” InstructionText=”Complete this form to create a new password.” DisplayUserName=”true” ContinueDestinationPageUrl=”~/Default.aspx” CancelDestinationPageUrl=”~/Default.aspx” CssClass=”changePassword” TitleTextStyle-CssClass=”changePassword_title” InstructionTextStyle-CssClass=”changePassword_instructions” ChangePasswordButtonStyle-CssClass=”changePassword_button” CancelButtonStyle-CssClass=”changePassword_button” ContinueButtonStyle-CssClass=”changePassword_button” Runat=”server” /> From the Library of Wow! eBook ptg 1188 CHAPTER 26 Using the Login Controls FIGURE 26.13 Changing your password with the ChangePassword control. </div> </form> </body> </html> The form in Listing 26.30 includes form fields for entering your username, old password, and new password (see Figure 26.13). After you submit the form, your old password is changed to the new password. The ChangePassword control in Listing 26.30 includes a DisplayUserName property. When this property is enabled, the username form field is rendered. You don’t need to include the DisplayUserName property when you place the page within a password-protected section of your web application. In that case, the ChangePassword control uses the name of the current user automatically. Sending a Change Password Email After the user changes his password, you can use the ChangePassword control to automati- cally send an email message that contains the new password. The page in Listing 26.31 contains a ChangePassword control that automatically sends an email. From the Library of Wow! eBook ptg 1189 Using the ChangePassword Control 26 NOTE You can send a user’s password in an email message even when the password is encrypted or hashed by the membership provider. LISTING 26.31 ChangePasswordEmail.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>ChangePassword Email</title> </head> <body> <form id=”form1” runat=”server”> <div> <asp:ChangePassword id=”ChangePassword1” DisplayUserName=”true” Runat=”server”> <MailDefinition From=”Admin@YourSite.com” BodyFileName=”ChangePassword.txt” Subject=”Your New Password” /> </asp:ChangePassword> </div> </form> </body> </html> The ChangePassword control in Listing 26.31 includes a MailDefinition property that defines the email sent by the control. The ChangePassword control emails the message contained in Listing 26.32. LISTING 26.32 ChangePassword.txt <%UserName%>, your new password is <%Password%>. From the Library of Wow! eBook ptg 1190 CHAPTER 26 Using the Login Controls FIGURE 26.14 Customizing the ChangePassword control with templates. The email message in Listing 26.32 includes two special expressions: <% UserName %> and <% Password %>. When the email is sent, the user’s existing username and new password are substituted for these expressions. NOTE The MailDefinition class uses the email server configured by the smtp element in the web configuration file. For more information on configuring the smtp element, see the earlier section of this chapter, “Sending a Create User Email Message.” Using Templates with the ChangePassword Control If you need to completely modify the appearance of the ChangePassword control, you can use templates to format the control. The ChangePassword control supports both a ChangePasswordTemplate and a SuccessTemplate. The page in Listing 26.33 illustrates how you can use both the templates supported by the ChangePassword control (see Figure 26.14). From the Library of Wow! eBook ptg 1191 Using the ChangePassword Control 26 LISTING 26.33 ChangePasswordTemplate.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>ChangePassword Template</title> </head> <body> <form id=”form1” runat=”server”> <div> <asp:ChangePassword id=”ChangePassword1” DisplayUserName=”true” Runat=”server”> <ChangePasswordTemplate> <h1>Change Password</h1> <asp:Label id=”FailureText” EnableViewState=”false” ForeColor=”Red” Runat=”server” /> <br /> <asp:Label id=”lblUserName” Text=”User Name:” AssociatedControlID=”UserName” Runat=”server” /> <br /> <asp:TextBox id=”UserName” Runat=”server” /> <br /><br /> <asp:Label id=”lblCurrentPassword” Text=”Current Password:” AssociatedControlID=”CurrentPassword” Runat=”server” /> <br /> <asp:TextBox id=”CurrentPassword” TextMode=”Password” Runat=”server” /> <br /><br /> From the Library of Wow! eBook ptg 1192 CHAPTER 26 Using the Login Controls <asp:Label id=”lblNewPassword” Text=”New Password:” AssociatedControlID=”NewPassword” Runat=”server” /> <br /> <asp:TextBox id=”NewPassword” TextMode=”Password” Runat=”server” /> <br /><br /> <asp:Button id=”btnChangePassword” Text=”Change Password” CommandName=”ChangePassword” Runat=”server” /> </ChangePasswordTemplate> <SuccessTemplate> Your password has been changed! </SuccessTemplate> </asp:ChangePassword> </div> </form> </body> </html> You can use controls with the following IDs in the ChangePasswordTemplate template: . UserName . CurrentPassword . ConfirmPassword . NewPassword . FailureText You also can add Button controls with the following values for the CommandName property: . ChangePassword . Cancel . Continue From the Library of Wow! eBook ptg 1193 Using the PasswordRecovery Control 26 Using the PasswordRecovery Control If a user forgets her password, she can use the PasswordRecovery control to email herself her password. The PasswordRecovery control either sends the user’s original password or resets the password and sends the new password. The page in Listing 26.34 contains a PasswordRecovery control. LISTING 26.34 ShowPasswordRecovery.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”> <style type=”text/css”> .passwordRecovery { font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .passwordRecovery_title { background-color:darkblue; color:white; font-weight:bold; } .passwordRecovery_instructions { font-size:12px; text-align:left; padding:10px; } .passwordRecovery_button { border:solid 1px black; padding:3px; } </style> <title>Show PasswordRecovery</title> </head> <body> <form id=”form1” runat=”server”> <div> From the Library of Wow! eBook . Control 26 { font:14px Verdana,Sans-Serif; background-color:lightblue; border:solid 3px black; padding:4px; } .changePassword_title { background-color:darkblue; color:white; font-weight:bold; } .changePassword_instructions. DisplayUserName property. When this property is enabled, the username form field is rendered. You don’t need to include the DisplayUserName property when you place the page within a password-protected. ContinueDestinationPageUrl=”~/Default.aspx” CancelDestinationPageUrl=”~/Default.aspx” CssClass=”changePassword” TitleTextStyle-CssClass=”changePassword_title” InstructionTextStyle-CssClass=”changePassword_instructions”