【发布时间】:2013-06-26 11:09:21
【问题描述】:
在我正在处理的应用程序中,创建的用户在激活帐户之前不会获得批准。 IsApproved 标志设置为 false,直到它们被激活。
当他们提交激活时,我们希望在激活用户之前检查他们的密码是否有效,但如果用户未获得批准,Membership.ValidateUser(..) 将始终返回 false,因此似乎无法区分不正确的密码密码和未经批准的用户。
如何检查密码以验证未批准的用户?
到目前为止我看过的可能的解决方案:
- 自定义成员资格提供程序:这需要做大量工作,破坏了在 .NET 中使用成员资格系统的全部意义,这是基本功能,必须有办法检查密码。
- 短暂设置 IsApproved 标志并将其改回:这是非常不安全的。
- 使用
ChangePassword更改为随机密码,然后再次返回,检查是否成功:这是一个令人讨厌的 hack,我真的不想这样做。 - 在
SqlMembershipProvider上调用私有的CheckPassword函数:方法是私有的,同样,我不想这样做。
还有其他方法吗?当然,这是任何具有激活等功能的全功能用户帐户系统都需要的标准功能。系统是否有比我正在做的更好的设计?我是否以错误的方式使用 IsApproved?
感谢您的帮助。
编辑:这似乎引起了一些混乱。我创建了一个用户帐户,它有一个满足复杂性要求的密码等。我想要做的是,当用户提交包含用户名和密码的表单时,检查他们提供的密码是否与密码匹配帐户。我只想知道他们是否提供了正确的密码。根据我对框架的调查,如果不检查他们的帐户是否处于活动状态,这似乎是不可能的也。
【问题讨论】:
-
为什么要使用
ValidateUser()方法检查他们的密码是否有效?创建用户时(使用IsApproved = false)Membership将始终验证密码。如果密码满足所有要求,则将添加用户。这应该会提示您密码是有效的。除非你对“valid”有不同的定义? -
创建用户验证密码是否满足特定要求。我想检查提交的密码是否是用户帐户的正确密码。
-
在创建帐户之前应验证密码。现在你倒退了。 是否有理由在创建帐户之前不验证密码?例如密码不能是123456
-
您使用什么标准来确定用户的密码是否正确?为什么不在创建帐户之前完成所有这些操作?也就是说,如果您不想使用 Membership Provider 给您的东西?
-
我已经添加了对问题的说明。
标签: .net asp.net-mvc asp.net-membership sqlmembershipprovider