0

我对如何使用电子邮件地址获取确切的人员 ID 来重置密码有疑问。所以,从这里我将通过电子邮件向用户发送一个超链接。

            SmtpClient client = new SmtpClient();

            try
            {
                SendPasswordResetEmail(u.EmailAddress.ToString(),u.Name.ToString(),UniqueID);
                lblMessage.ForeColor = System.Drawing.Color.LimeGreen;
                lblMessage.Text = "Email has been successfully sent!";
            }
            catch (Exception exc)
            {
                lblMessage.ForeColor = System.Drawing.Color.Red;
                lblMessage.Text = "ERROR: " + exc.Message;
            }

然后这是我给用户的消息内容,以便让他们点击进入超链接。

        string emailAddress = txtEmail.Text;

        User u=db.Users.Single(x => 
                            x.EmailAddress == emailAddress);

        MailMessage mailMessage = new MailMessage(u.EmailAddress, ToEmail);
        StringBuilder sbEmailBody = new StringBuilder();
        sbEmailBody.Append("Dear " + u.Name.ToString() + ",<br/><br/>");
        sbEmailBody.Append("Please click on the following link to reset your password");
        sbEmailBody.Append("<br/>"); sbEmailBody.Append("https://localhost:44305/Registration/ChangePwd.aspx?uid=" + u.Id);
        sbEmailBody.Append("<br/><br/>");
        sbEmailBody.Append("<b>吹水站&lt;/b>");

        mailMessage.IsBodyHtml = true;

        mailMessage.Body = sbEmailBody.ToString();
        mailMessage.Subject = "Reset Your Password";
        SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587);

        MailMessage msg = new MailMessage();

        msg.To.Add(new MailAddress(txtEmail.Text));
        smtpClient.EnableSsl = true;
        smtpClient.Send(mailMessage);

那么这是我的 ChangePwd.aspx?uid= 页面

<form id="form1" runat="server">
    <div>
        <h1>Change password</h1>
    </div>
    <div>
        <asp:Literal ID="litEmailAddress" runat="server"></asp:Literal>
    </div>
    <div>
        <p>Enter new password : 
        <asp:TextBox ID="txtNewPwd" runat="server" TextMode="Password"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Please fill in the blank" ControlToValidate="txtNewPwd" CssClass="error" Display="Dynamic"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtNewPwd" CssClass="error" ErrorMessage="Password must be between 8-16 characters including at least 1 letter and 1 number" ValidationExpression="((?=.*\d)(?=.*[a-z]).{8,16})"></asp:RegularExpressionValidator>
        </p>
    </div>
    <div>
        Re-enter new password:
        <asp:TextBox ID="txtRepeatPwd" runat="server" TextMode="Password"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="Please fill in the blank" ControlToValidate="txtRepeatPwd" CssClass="error" Display="Dynamic"></asp:RequiredFieldValidator>
        <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="txtNewPwd" ControlToValidate="txtRepeatPwd" CssClass="error" ErrorMessage="Password and repeat password are not matched"></asp:CompareValidator>
    </div>
    <p>
    <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="False" PostBackUrl="~/Registration/Login.aspx" /><asp:Button ID="btnConfirm" runat="server" Text="Confirm" OnClick="btnConfirm_Click" />
    </p>
    <div>
    <p><asp:Label ID="lblSuccess" runat="server" Text=""></asp:Label></p>
    <asp:Label ID="lblFailed" runat="server" Text=""></asp:Label>
    </div>

</form>

从这里开始,当他们单击指向 ChangePwd.aspx 的超链接进行重置时,我不知道如何获取确切的用户电子邮件地址。然后,我必须更新数据库以存储用户更新后的更改密码。我试图在网上搜索,但缺乏从互联网上获得的资源。请任何人帮忙谢谢。

4

2 回答 2

1

加载 ChangePwd.aspx 页面时,您需要唯一地识别用户,以便您可以将新密码保存给该特定用户。您需要在这里将主 ID(用户 ID 或电子邮件地址)从您的电子邮件传递到 ChangePwd.aspx 页面。通过将 ID 传递给 Urls 查询字符串,您正确地执行了该操作,

https://localhost:44305/Registration/ChangePwd.aspx?uid=" + u.Id);

现在,您需要在 ChangePwd.aspx.cs(WebForm 的服务器端类)中阅读此内容。您可以在 page_load 方法中执行类似的操作,

protected void Page_Load(object sender, EventArgs e)
{
   string userId= Request.QueryString["uid"];
   // get the user *User* from the database, using the above retrieved ID

   litEmailAddress.text = User.email; // something like this
}

现在,您可以将新密码保存给该用户。让我知道这是否有帮助或需要更多帮助。

于 2020-01-08T00:17:10.753 回答
0

您应该能够使用该Request.QueryString属性来访问uidURL 中指定的值(即Request.QueryString["uid"])。然后应该很简单地User用它来获取对象Id并获取用户的电子邮件地址。

这是一个基本教程:https ://www.c-sharpcorner.com/UploadFile/ca2535/query-string-in-Asp-Net/

于 2020-01-08T00:04:01.920 回答