【问题标题】:Membership: Resetting user password成员资格:重置用户密码
【发布时间】:2013-12-27 11:43:09
【问题描述】:

我正在使用 ASP.NET Membership (SQL Server) Provider 来管理我的用户。对于普通用户,他们需要使用问答方式来重置密码,所以web.config中的requiresQuestionAndAnswer标志为true。但是在“管理”部分(位于网站的子文件夹中),我需要启用密码重置,而不需要他输入问题的答案。所以我尝试在 Admin 子文件夹中添加一个单独的 web.config,希望它默认继承根文件夹中的所有内容,然后对其应用以下转换,用于调试和发布配置:

<?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 本身是空的,因为它只包含
&lt;?xml version="1.0"?&gt;&lt;configuration /&gt;。当然,我希望它从根文件夹的web.config 继承所有其他设置。但这似乎不起作用。当我尝试调用无参数重载时,ResetPassword() Membership 方法仍然给我Value cannot be null 错误。我做错了什么?

【问题讨论】:

    标签: c# asp.net web-config asp.net-membership web.config-transform


    【解决方案1】:

    好的。弄清楚了。我采取的方法是错误的。无需在 Admin 子文件夹中设置另一个 web.config。您基本上需要将第二个 MembershipProvider 添加到您的根级别web.config,当然名称不同,并将requiresQuestionAndAnswer 设置为false。在&lt;membership&gt;节点中,可以设置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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多