MembershipUser.ResetPassword() 方法的逻辑是什么

What is the logic is MembershipUser.ResetPassword() method

通常,ResetPassword(string passwordAnswer) return 是会员用户的新密码。 ChangePassword(string oldPassword,string newPassword) 接受两个参数:旧密码和新密码。我同意,但在下面的代码中:

string pwd = mu.ResetPassword(k.SecretAnswer);
mu.ChangePassword(pwd, k.password);
return RedirectToAction("Login");

根据此代码,pwd 包含旧密码,但 ResetPassword() 方法 return 包含新的随机密码。那么pwd怎么能代表旧密码呢? ResetPassword() 方法 return 不应该是一个新密码吗?我错过了什么?这背后的逻辑是什么?

重置密码创建了一个必须在首次使用时重置的密码。它更多地用作令牌(在 auth 领域)而不是实际密码。

因此,当您调用 mu.ChangePassword(pwd, k.password); 时,您将 pwd 令牌“交换”为“正常”密码。

如果您在上面的行中跳过更改密码并尝试使用 Reset 方法中的 pwd 登录,则不会成功。 UI 会强制 您更改密码,然后使用 密码 登录.

这样设计的目的是让用户是唯一能够以纯文本形式(即未加密)看到其密码的用户。

编辑:究竟什么是令牌,令牌和密码有什么区别?

简答:

  1. 一个密码可以使用多次次,而token只能使用一次.
  2. 密码验证令牌兑换.
  3. 密码需要每次使用验证。 令牌需要验证才能获得

虽然令牌和密码都用于获得访问权限,但区别在于它们的使用方式。

让我们尝试一些 real-world 示例(假设这些示例不能 100% 符合我们的用例,但我相信它们可以提供帮助)。

您的 ATM 卡的 PIN 是 密码,因为:

  1. 这是秘密
  2. 每次使用都会验证
  3. 你可以反复使用它

如果您将西装带到干洗店,他们会给您一张票(带有编号),您可以用它来取回西装。那是一个 代币 因为:

  1. 您必须实际持有门票才能取回您的西装
  2. 如果你有票,你就会得到西装。无话可问。当你把它放下时,你证明了这是你的衣服。
  3. 一经使用,门票一文不值