我正在使用ASP.NET Membership(SQL Server)Provider来管理我的用户。对于普通用户,他们需要使用问题/答案方法重置密码,因此requiresQuestionAndAnswer
中的true
标记为web.config
。但是在Admin部分(位于网站的子文件夹中),我需要启用密码重置,而不需要他输入问题的答案。所以我尝试在Admin子文件夹中添加一个单独的web.config
,期望默认情况下从根文件夹继承所有内容,然后对Debug和Release配置应用以下转换:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" requiresQuestionAndAnswer="false" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</providers>
</membership>
</system.web>
</configuration>
Admin子文件夹的web.config
本身是空的,因为它只包含
<?xml version="1.0"?><configuration />
。当然我希望它继承根文件夹web.config
中的所有其他设置。但它似乎没有用。当我尝试调用无参数重载时,ResetPassword()
成员资格方法仍然会出现Value cannot be null
错误。我做错了什么?
答案 0 :(得分:1)
行。弄清楚了。我采取的方法是错误的。无需在Admin子文件夹中设置另一个web.config
。您基本上需要将第二个MembershipProvider添加到根级别web.config
,当然使用其他名称,并将requiresQuestionAndAnswer
设置为false
。在<membership>
节点中,您可以设置defaultProvider="NAME_OF_YOUR_FIRST_PROVIDER"
以确保安全。
然后在您的代码中,您可以执行以下操作来重置用户的密码,而无需问题/答案。
MembershipUser mu = Membership.Providers["NAME_OF_YOUR_SECOND_PROVIDER"].GetUser(<USERNAME>, false);
if (mu != null)
string NewPwd = mu.ResetPassword();