请参阅下面的更新:
我正在使用ASP.NET SQL Membership Provider。
到目前为止,我能够允许用户更改他们的密码,但前提是他们经过身份验证或登录到应用程序。我真正需要的是让用户能够在电子邮件中获得链接。他们可以单击此链接并重置密码。
示例:假设用户忘记了他或她的密码,他们可以访问一个页面,他们可以输入安全问题和答案;或他们存档的电子邮件地址。然后,他们将收到一封电子邮件,其中包含重置密码的链接。
到目前为止,我所拥有的是:它只允许经过身份验证的用户重置他们的密码:
我不想使用生成密码的恢复控制。
public void ChangePassword_OnClick(object sender, EventArgs args)
{
MembershipUser user = Membership.GetUser(User.Identity.IsAuthenticated);
try
{
if (user.ChangePassword(OldPasswordTextbox.Text, PasswordTextbox.Text))
{
Msg.Text = "Password changed.";
}
else
{
Msg.Text = "Password change failed. Please re-enter your values and try again.";
}
}
catch (Exception e)
{
Msg.Text = "An exception occurred: " + Server.HtmlEncode(e.Message) + ".
try again.";
}
}
我可以使用字符串生成器创建存储过程和电子邮件,但我不知道如何让未经身份验证的用户更改密码。当用户单击链接时,是否有办法对用户进行身份验证。我什至不知道如何问这个。
谢谢阅读:
更新:
好的,我设法使用以下代码获取重置密码:
protected void btnResetPassword_Click(object sender, EventArgs e)
{
string username = "ApplePie12";
MembershipUser currentUser = Membership.GetUser(username);
currentUser.ChangePassword(currentUser.ResetPassword(), txtResetPassword.Text);
}
这是我的计划:
将此页面设为公开,以便未经身份验证的用户可以访问,但只能通过电子邮件链接访问。
创建一个存储过程,通过用户输入的用户名或安全问题/答案来验证用户是否存在。
如果它们存在,则会向它们发送一个包含令牌/GUID 的链接
最后,当他们单击链接时,他们将登陆此页面,要求他们更改密码。*链接一经使用即失效。
我唯一的问题是:执行上述所有操作需要在 Web Config 文件中使用安全问题/答案关闭。
我真的很想将安全问题作为用户通过电子邮件或安全问题进行验证的选项。如果这不可能,我将不得不创建某种帐号或用户 ID (不是会员用户 ID)作为替代方案。