【发布时间】:2015-10-20 07:23:45
【问题描述】:
我正在 Umbraco 7.1.7 中为我们的会员区建立登录/注册部分。
我想通过电子邮件以纯文本向用户发送他们的密码。
这个想法是,如果用户忘记了他们的密码,他们可以简单地输入他们的电子邮件地址(这也是他们的用户名)并点击按钮:
现在,我知道 Umbraco 使用 ASP.NET Membership Provider 并散列密码,这很好,但我需要访问纯文本版本才能在电子邮件中发送。
我已更改我的 web.config 以包含以下内容:
<membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="UmbracoMembershipProvider"
type="Umbraco.Web.Security.Providers.MembersMembershipProvider, Umbraco"
minRequiredNonalphanumericCharacters="0"
minRequiredPasswordLength="0"
useLegacyEncoding="true"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
defaultMemberTypeAlias="Member"
passwordFormat="clear" />
而我的 Controller Action 方法如下所示:
// Forgot password logic to send email
[ActionName("MvcMemberForgot")]
public ActionResult MvcMemberForgot(MvcMemberForgotModel model)
{
string emailaddress = model.Email.ToString(); // The users entered email address.
var member = Services.MemberService.GetByEmail(emailaddress);
var sb = new StringBuilder(); // To build the message.
sb.Append("Here is the password you chose for this email address: ");
sb.Append(password); // I need a password value here...
// Send the email.
library.SendMail("noreply@company.co.uk", emailaddress, "Password", sb.ToString(), true);
return CurrentUmbracoPage();
}
我可以使用var x = member.RawPasswordValue;返回散列密码,有没有办法获取用户以类似方式注册时输入的密码?
【问题讨论】:
-
密码永远不应以纯文本形式发送。请参阅Security.SE 上的此问题,其中提到向用户发送纯文本密码。
-
您说得对,先生,我已经用一些更好的建议修改了我的答案。感谢您向我指出这一点:)
-
只是出于兴趣,您是否对我的问题投了反对票,因为我对以纯文本形式发送密码有错误的想法,或者不清楚或其他什么?我想知道所以我不会再犯同样的错误,我还在学习所以再次感谢您的帮助。 :)
-
@RyanEmerle 很好地解释了为什么通用哈希不能胜任任务。
标签: c# model-view-controller membership-provider umbraco7 password-recovery