检查SqlMembershipProvider上的密码是否绕过IsApproved?

时间:2013-06-26 11:09:22

标签: .net asp.net-mvc asp.net-membership sqlmembershipprovider

在我正在处理的应用程序中,创建的用户在激活帐户之前不会获得批准。 IsApproved标志在激活之前设置为false。

当他们提交激活时,我们希望在激活用户之前检查他们的密码是否有效,但如果用户未获批准,Membership.ValidateUser(..)将始终返回false,因此似乎无法区分密码错误和未经批准的用户。

如何检查密码以验证未获批准的用户?

到目前为止我看过的可能的解决方案:

  • 自定义成员资格提供者:这是很多工作,并且在.NET中使用成员资格系统的全部意义,这是基本功能,必须有办法检查密码。
  • 简单地设置IsApproved标志并将其更改回来:这是非常不安全的。
  • 使用ChangePassword更改为随机密码,然后再返回,检查是否成功:这是一个讨厌的黑客,我真的不想这样做。
  • CheckPassword上调用私有SqlMembershipProvider函数:方法是私有的,原因是,我不想这样做。

还有其他方法吗?当然,这是标准功能,任何功能齐全的用户帐户系统都需要激活等功能。系统的设计是否比我正在做的更好?我是以错误的方式使用IsApproved吗?

感谢您的帮助。

编辑:这似乎引起了一些混乱。我创建了一个用户帐户,它有一个符合复杂性要求的密码等。我想要做的是,当用户提交一个包含用户名和密码的表单时,检查他们提供的密码是否与密码相匹配帐户。我只想知道他们是否提供了正确的密码。根据我对框架的调查,如果没有检查他们的帐户是否有效,这似乎是不可能的。

1 个答案:

答案 0 :(得分:0)

现在我了解你。我的建议是暂时将他们的密码存储在Membership Profile中并与之匹配。匹配后,激活帐户并清除Profile。注意:profile会将password存储在plain text中。我正在做类似的事情。