向会员发送忘记密码的最佳做法

问题描述 投票:3回答:1

我正在为Umbraco 7.1.7的会员区建立一个登录/注册部分

我想通过电子邮件以明文形式向用户发送密码。

这个想法是,如果用户忘记了密码,他们只需输入他们的电子邮件地址(也可以作为他们的用户名)并点击按钮: 在此输入图像描述
现在,我知道Umbraco使用ASP.NET成员资格提供程序和哈希密码,这很不错但我需要访问明文版本才能在电子邮件中发送。

我已经更改了我的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("[email protected]", emailaddress, "Password", sb.ToString(), true);
    return CurrentUmbracoPage();
}

我可以使用var x = member.RawPasswordValue; 要返回哈希密码,是否有办法获取用户在以类似方式注册时输入的密码?

c# model-view-controller membership-provider umbraco7 password-recovery
1个回答
9
投票

我不会以明文形式向人们发送电子邮件,这是非常糟糕的安全措施。 我最近接近这个的方法是做以下事情:

  • 向成员(标签)添加属性以存储重置时间戳
  • 有一个重置请求表单,通过电子邮件地址验证用户,然后将标签设置为30分钟到未来设置的时间戳
  • 向会员发送一封电子邮件,其中包含指向其他表单页面的链接,并传递他们的电子邮件和时间戳
  • 在表单上,​​获取电子邮件和时间戳,验证电子邮件是否存在,以及时间戳是否已过期
  • 如果他们通过了这些测试,请为他们提供输入并确认新密码的选项,然后将该密码保存到用户(同时从标签中清除时间戳)

我的方法基于此示例repo的代码: https//github.com/warrenbuckley/CWS-Umbraco-Standard-Membership ,其中包含许多与成员合作的有用示例!

© www.soinside.com 2019 - 2024. All rights reserved.