【发布时间】:2015-02-10 14:05:18
【问题描述】:
我的 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"
但我仍然收到同样的信息。我做错了什么?
【问题讨论】:
-
启用密码检索可能不是你想要的,因为它改变了密码管理的一些重要行为。 (也就是说,密码不应该是可恢复的。使它们可恢复打破了这一点。)如果您确实想要这样做,则必须在成员资格提供程序而不是控件上执行此操作。可能在
Web.config。相反,在覆盖之前尝试检查e.Message.Body中已经存在的值。也许你可以改变现有的价值而不是创造一个全新的价值? -
密码检索只有在密码没有经过哈希处理的情况下才是一种选择。您的会员密码格式是什么?
-
e.Message.Body 包含带有用户名和密码的标准消息,我只想处理用户名和密码并将文本更改为我自己的偏好
-
是的,我的密码格式是散列的
-
没有很好的文档记录,但是
PasswordRecovery控件有一个MailDefinition属性。这返回的对象有一个名为BodyFileName的属性,它应该是一个文件,它将被读取并用作电子邮件的正文。真正隐藏的功能是它将在该正文中对<% UserName %>和<% Password %>进行一些替换。我自己没有尝试过,但可能值得尝试让它工作。