2015-02-10 42 views
0

我的web应用程序有一个ASP密码恢复控件,它在发送包含短文本,然后用户名和密码重设密码。更改由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

启用密码检索可能不是你想要的,因为它改变了密码管理的一些重要行为。 (也就是说,密码永远不可恢复,使它们恢复可以打破这一点。)如果你想这样做,你必须在成员提供者而不是控件上执行。可能在'Web.config'中。相反,在覆盖之前,尝试检查'e.Message.Body'中已经存在的值。也许你可以改变现有的价值,而不是创造一个全新的价值? – David 2015-02-10 14:11:09

+0

如果密码未经过散列处理,密码检索只是一个选项。您的会员资格的密码格式是什么? – user1666620 2015-02-10 14:13:54

+0

e.Message.Body包含带有用户名和密码的标准消息,我只想获取用户名和密码的句柄,并将文本更改为我自己的首选 – JsonStatham 2015-02-10 14:37:03

回答

0

如果您的Membership被配置为哈希,则密码检索功能将被禁用。

如果在ASP.NET应用程序的Web.config文件中将enablePasswordRetrieval设置为true并将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 
} 
+0

更改密码功能不起作用,我得到:“值不能为空参数名称:passwordAnswer” – JsonStatham 2015-02-10 15:55:20

+0

然后获取密码答案并使用其他ChangePassword重载。如果您想要更好的答案,请在web.config中提供成员资格提供者定义。需要这样做是因为您尚未提供您为成员资格定义的任何要求。 – user1666620 2015-02-10 16:41:49

0

我曾大量过于复杂这一点。

转换消息

用户名译词:<%USERNAME%>译词 密码

按达明的评论,你可以通过创建自己的PasswordReset.txt文件,像轻松解决这个:<%密码%>

英语消息

用户南E:<%USERNAME%>密码:<%密码%>

然后只是去PasswordRecovery属性框,点MailDefinition-BodyFileName在您的文件。

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

不需要在后面的代码中弄乱发送邮件事件。

希望这可以帮助别人。

+0

我不是一个谁投了票,但它似乎非常不安全,首先有密码未加密,其次以纯文本电子邮件密码? ......一旦密码丢失,确定“密码重置”是更可取的,只需确保用户可以验证,然后允许他们改变它? – BenjaminPaul 2015-02-10 16:58:44

+0

@BenjaminPaul - 这是为了密码重置功能,其中新生成的重置密码正在发送给用户 - 而不是它们的原始密码(这是不可恢复的,因为它已被散列) – 2015-02-10 17:01:24

+0

很高兴你得到它的工作。 – 2015-02-10 17:01:43

相关问题