请参阅以下更新:如何允许未经身份验证的用户重置密码?
我使用ASP.NET SQL成员资格提供。
到目前为止,我能够允许用户更改其密码,但只有当他们认证或登录到应用程序。 我真正需要的是用户能够通过电子邮件获得链接。他们可以点击此链接并重置密码。例如:假设一个用户忘记了他或她的密码,他们可以访问一个页面,他们可以进入安全问题和答案;或他们的电子邮件地址。然后,他们会收到一封电子邮件,其中包含重置密码的链接。
所有我到目前为止是这样的:只允许通过认证的用户重置其密码:
我不想使用恢复控制生成一个密码。
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配置文件。
我真的很想将安全问题作为用户的选择,以便通过电子邮件或安全问题进行验证。如果这是不可能的,我将不得不创建某种帐号或用户标识(不是成员身份用户标识)作为替代。
谢谢克里斯,我没有想到这个:那么我如何验证令牌?我相信我可以生成一个GUID并将其哈希。一旦我知道如何验证令牌,我就可以做到这一点。示例:我可以创建一个允许用户输入电子邮件或安全问题的文本框。如果它匹配一个GUID生成,验证并通过电子邮件发送给用户? – Asynchronous
这仅适用于存储唯一电子邮件的情况。当用户要求重置密码时,您需要提供电子邮件并将令牌发送至电子邮件并将该对(电子邮件,令牌)存储在某处。然后,当令牌回来时,您只需阅读电子邮件,然后获得用户。 –
是的,我只使用唯一的电子邮件,不能重复*请参阅上面的更新。 – Asynchronous