向会员发送忘记密码的最佳做法
Best practice to send a member their forgotten password
我正在 Umbraco 7.1.7 中为我们的会员区构建一个 login/registration 部分。
我想通过电子邮件以纯文本的形式向用户发送他们的密码。
这个想法是,如果用户忘记了密码,他们可以简单地输入他们的电子邮件地址(也作为他们的用户名)并点击按钮:
现在,我知道 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;
到 return 哈希密码,有没有办法获取用户以类似方式注册时输入的密码?
我不会以纯文本形式向人们发送电子邮件,这是非常糟糕的安全做法。我最近处理这个问题的方法是执行以下操作:
- 为成员(标签)添加一个属性用于存储重置时间戳
- 有一个重置请求表单,通过电子邮件地址验证用户,然后将标签设置为未来 30 分钟的时间戳
- 向成员发送一封带有 link 的电子邮件到另一个表单页面,传递他们的电子邮件和时间戳
- 在表单上,获取电子邮件和时间戳,确认电子邮件存在且时间戳未过期
- 如果他们通过了这些测试,请让他们选择输入并确认新密码,然后您为用户保存该密码(同时清除标签上的时间戳)
我的方法基于此示例存储库中的代码:https://github.com/warrenbuckley/CWS-Umbraco-Standard-Membership,其中包含许多与成员合作的有用示例!
我正在 Umbraco 7.1.7 中为我们的会员区构建一个 login/registration 部分。
我想通过电子邮件以纯文本的形式向用户发送他们的密码。
这个想法是,如果用户忘记了密码,他们可以简单地输入他们的电子邮件地址(也作为他们的用户名)并点击按钮:
现在,我知道 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;
到 return 哈希密码,有没有办法获取用户以类似方式注册时输入的密码?
我不会以纯文本形式向人们发送电子邮件,这是非常糟糕的安全做法。我最近处理这个问题的方法是执行以下操作:
- 为成员(标签)添加一个属性用于存储重置时间戳
- 有一个重置请求表单,通过电子邮件地址验证用户,然后将标签设置为未来 30 分钟的时间戳
- 向成员发送一封带有 link 的电子邮件到另一个表单页面,传递他们的电子邮件和时间戳
- 在表单上,获取电子邮件和时间戳,确认电子邮件存在且时间戳未过期
- 如果他们通过了这些测试,请让他们选择输入并确认新密码,然后您为用户保存该密码(同时清除标签上的时间戳)
我的方法基于此示例存储库中的代码:https://github.com/warrenbuckley/CWS-Umbraco-Standard-Membership,其中包含许多与成员合作的有用示例!