我在ASP.NET MVC 2 Web应用程序中使用密码恢复控件。当我单击没有用户名的提交按钮时,它表示缺少带有星号的用户名。如果我输入一个用户名,表单提交但没有任何反应。我在这里错过了什么吗?
的Web.config:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="yyy@zzz.com">
<network host="mail.zzz.com" userName="yyy@zzz.com"
password="xxxxx" enableSsl="false" />
</smtp>
</mailSettings>
</system.net>
machine.config中
<membership defaultProvider="MySQLMembershipProvider">
<providers>
<add name="MySQLMembershipProvider"
type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"
autogenerateschema="true"
connectionStringName="LocalMySqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression="" />
</providers>
</membership>
答案 0 :(得分:0)
根据您的配置,您使用的是散列密码并禁用了密码检索。这意味着您无法恢复密码(因为它们是经过哈希处理的)。你只能重置它们。
这是一种安全设置,因此请勿进行更改。但请注意,当密码被散列时,您无法“恢复”密码。
如果您的要求指定密码必须是可恢复的,那么您必须将passwordFormat更改为Encrypted并设置enablePasswordRetrieval =“true”。但是要知道,数据库中的任何散列密码和密码答案都需要由用户重新输入,因为就提供商而言,当前值将“损坏”。要强制执行此更改,您可以覆盖登录页面中的Authenticate方法并检查用户的LastPasswordChange日期,然后将其重定向到页面以重新配置其密码并回答,以便他们可以正确登录。
最后要提到的一点是,加密密码是可检索的,因为它们可以被解密。这意味着它们不太安全。如果可以,请坚持使用散列密码。