0

我正在使用ASP.NET成員資格(SQL Server)提供程序來管理我的用戶。對於普通用戶,他們需要使用提問/回答方法來重置他們的密碼,所以requiresQuestionAndAnswer標誌是trueweb.config。但在管理部分(駐留在網站中的子文件夾中),我需要啓用密碼重置,而不需要他輸入問題的答案。於是,我就增加一個獨立的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> 

web.config Admin子文件夾本身是空的,因爲它只包含
<?xml version="1.0"?><configuration />。當然我希望它繼承根文件夾的所有其他設置web.config。但它似乎並不奏效。 ResetPassword()當我試圖調用無參數重載時,Membership的方法仍然給我Value cannot be null錯誤。我究竟做錯了什麼?

回答

1

好的。弄清楚了。我採取的做法是錯誤的。沒有必要在Admin子文件夾中設置另一個web.config。您基本上需要添加第二個MembershipProvider到您的根級別web.config,當然有不同的名稱,並且爲其設置requiresQuestionAndAnswerfalse。在<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(); 
相關問題