0

ASP.NET 멤버십 (SQL Server) 공급자를 사용하여 사용자를 관리하고 있습니다. 일반 사용자의 경우 질문/응답 방법을 사용하여 비밀번호를 재설정해야하므로 requiresQuestionAndAnswer 플래그는 trueweb.config입니다. 그러나 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> 

web.config을 Admin 하위 폴더 자체의 의미는 단지
<?xml version="1.0"?><configuration />입니다. 물론 루트 폴더의 web.config에서 다른 모든 설정을 상속 받기를 기대합니다. 그러나 그것은 효과가없는 것처럼 보입니다. ResetPassword() 회원 가입 방법은 매개 변수가 적은 과부하를 호출하려고하면 여전히 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();