gpt4 book ai didi

c# - 如何允许未经身份验证的用户重设密码?

转载 作者:行者123 更新时间:2023-12-02 22:01:02 31 4
gpt4 key购买 nike

请参阅下面的更新:

我正在使用 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.";
}
}

我可以使用 String Builder 创建存储过程和电子邮件,但我不知道如何让 un-authenticated 用户更改密码。有没有办法让用户在单击链接时进行身份验证。我什至不知道怎么问这个问题。

感谢阅读:

更新:

好的,我设法使用此代码获得了重置密码:

protected void btnResetPassword_Click(object sender, EventArgs e)
{
string username = "ApplePie12";
MembershipUser currentUser = Membership.GetUser(username);
currentUser.ChangePassword(currentUser.ResetPassword(), txtResetPassword.Text);
}

这是我的计划:

  1. 公开此页面,以便未经身份验证的用户可以访问它,但只能通过电子邮件链接访问。

  2. 创建一个存储过程,通过用户输入的用户名或安全问题/答案来验证用户是否存在。

  3. 如果存在,则会向他们发送包含 token /GUID 的链接

  4. 最后,当他们单击链接时,他们将登陆此页面,要求他们更改密码。 *链接在使用后立即过期。

我唯一的问题是:执行上述所有操作需要在 Web 配置文件中关闭使用安全问题/答案。

我真的很想将安全问题作为一个选项,供用户通过电子邮件或安全问题进行验证。如果这不可能,我将不得不创建某种帐号或用户 ID (不是成员(member)用户 ID) 作为替代。

最佳答案

我的回答并不特定于成员(member)资格提供商,但希望能为您指明正确的方向。通常解决这个问题的方法是生成一个非常长的随机字符串,称为 token。您向他们发送一个包含此 token 作为参数的链接,例如:

http://foo.bar/reset?token=asldkfj209jfpkjsaofiu029j3rjs-09djf09j1pjkfjsodifu091jkjslkhfao

在您的应用程序中,您可以跟踪生成的 token 。如果您收到包含该 token 的请求,则可以像该用户一样对其进行身份验证。

一些注意事项:

  • 生成的 token 应该是随机的,并且在短时间内有效地不可猜测。
  • token 在生成后只能在很短的时间内起作用,最好比猜测它所需的时间短。
  • token 只能使用一次。用户使用它更改密码后,将其从系统中删除。

关于c# - 如何允许未经身份验证的用户重设密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931908/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com