我的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"
但我仍然得到同样的信息。我做错了什么?
答案 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
。
只要您拥有上述标签,控件就会为您换出用户名和密码。
无需在后面的代码中乱丢发送邮件事件。
希望这有助于某人。