改变asp:PasswordRecovery电子邮件发送的消息而不丢失密码/用户名

时间:2015-02-10 14:05:19

标签: c# asp.net

我的Web应用程序上有一个ASP PasswordRecovery控件,它在成功的密码休息时发送一封电子邮件,其中包含一小段文本,然后是用户名和新重置的密码。

我需要将短文本双语,所以我在后面的代码中添加了以下内容:

protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e)
{
    e.Message.IsBodyHtml = false;
    string body = "translated text" + Environment.NewLine + "english text";                            

    e.Message.Body = body;
    e.Message.Subject = ConfigurationManager.AppSettings["Subject"];
}

然后发生了翻译的文本,但现在缺少用户名和密码。

所以我尝试将它添加到我的身体:

string pw = Membership.GetUser(PasswordRecovery1.UserName).GetPassword(PasswordRecovery1.Answer);
            string p = PasswordRecovery1.UserName;

我收到了这条消息:

  

此成员资格提供程序尚未配置为支持密码   检索。

所以我把它添加到控件中:

enablePasswordRetrieval="true"

但我仍然得到同样的信息。我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果您的成员资格配置为哈希,则禁用密码检索。

  

如果将enablePasswordRetrieval设置为true并且在ASP.NET应用程序的Web.config文件中将passwordFormat设置为Hashed,则抛出ConfigurationException。

https://msdn.microsoft.com/en-us/library/2x0c6sfa%28v=vs.110%29.aspx

如果是这种情况,则应将新密码存储在字符串中,然后使用ChangePassword()函数将其保存到数据库中。

我的工作如下:

MembershipUser user = Membership.GetUser("username"); // or however you want to retrieve the MembershipUser object
string password = Membership.GeneratePassword(12, 0); // generate a new password
bool changePasswordSucceeded = user.ChangePassword(user.ResetPassword(), password); // reset the password

if(changePasswordSucceeded)
{
    // email logic here
}

答案 1 :(得分:0)

我大规模地过度复杂化了。

根据Damien的评论,您可以通过创建自己的PasswordReset.txt文件轻松解决此问题,例如:

  

翻译消息

     

UserName的翻译字词:<%UserName%>翻译过的单词   密码:<%Password%>

     

英文消息

     

用户名:<%UserName%>密码:<%Password%>

然后转到PasswordRecovery属性框并在您的文件中指向MailDefinition-BodyFileName

只要您拥有上述标签,控件就会为您换出用户名和密码。

无需在后面的代码中乱丢发送邮件事件。

希望这有助于某人。