SimpleMembershipProvider MinRequiredPasswordLength는 Web.config 멤버십 공급자 섹션에서 6으로 정의되었음에도 불구하고 항상 0을 반환합니다.

StackOverflow https://stackoverflow.com//questions/12702649

문제

나는로 전환했다 SimpleMembershipProvider ASP.NET MVC 4 앱에서.다른건 다 잘되는데 이게 문제네요...

이 코드를 사용해 보면 다음과 같습니다.

var password = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0);

MinRequiredPasswordLength 항상 0입니다.멤버십 제공업체에 정의된 설정 Web.config 섹션을 읽을 수 없습니다.

멤버십 기본 공급자는 다음과 같습니다. Web.config 부분:

<membership defaultProvider="AspNetSqlMembershipProvider">
    <providers>
         <clear />
             <add name="AspNetSqlMembershipProvider"
                  type="System.Web.Security.SqlMembershipProvider"
                  connectionStringName="DefaultConnection"
                  enablePasswordRetrieval="false"
                  enablePasswordReset="true"
                  requiresQuestionAndAnswer="false"
                  requiresUniqueEmail="false"
                  maxInvalidPasswordAttempts="5"
                  minRequiredPasswordLength="6"
                  minRequiredNonalphanumericCharacters="0"
                  passwordAttemptWindow="10"
                  applicationName="/Acad" />
    </providers>
</membership>

내가 얻은 디버그 정보는 다음과 같습니다.

enter image description here

힌트가 있나요?

SimpleMembershipProvider 너무 간단해서 Web.config 섹션도 사용하지 않나요?

현재로서는 해결책

극복하기 위해 SimpleMembershipProvider 현재 제한 사항을 사용했습니다. 이 코드 정의된 값을 가져오려면 Web.config:

MembershipSection membershipSection = (MembershipSection)WebConfigurationManager.GetSection("system.web/membership");
var defaultProvider = membershipSection.DefaultProvider;
ProviderSettings providerSettings = membershipSection.Providers[defaultProvider];
var minRequiredPasswordLength = int.Parse(providerSettings.Parameters["minRequiredPasswordLength"]);
도움이 되었습니까?

해결책

ASP.NET MVC 4 앱에서 SimpleMembershipProvider로 전환했습니다.

음, web.config에 표시된 관련 섹션에 따르면 전혀 그렇지 않은 것 같습니다.당신은 다음을 사용하고 있습니다 AspNetSqlMembershipProvider.

다음으로 전환하고 싶다면 SimpleMembershipProvider 올바르게 구성했는지 확인하십시오.

<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider"
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
    />
  </providers>
</membership>

이는 SimpleMembershipProvider가 web.config를 통한 해당 속성 설정을 지원하지 않는다는 의미입니다.심지어 그것을 사용하지도 않습니다.그러한 기능을 원한다면 직접 구현해야 합니다.

다른 팁

다음에서 상속받을 수 있습니다. SimpleMembershipProvider 그리고 재정의 MinRequiredPasswordLength:

public class YoursSimpleMembershipProvider : SimpleMembershipProvider
{
    private const int MIN_REQUIRED_PASSWORD_LENGTH = 6;

    private const int MIN_REQUIRED_NON_ALPHANUMERIC_CHARACTERS = 0;

    public override int MinRequiredPasswordLength
    {
        get
        {
            return MIN_REQUIRED_PASSWORD_LENGTH;
        }
    }
}

다음과 같이 web.config에 minRequiredPasswordLength="3"을 입력하면 발견되었습니다.

<membership defaultProvider="SimpleMembershipProvider" >
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData"
         minRequiredPasswordLength="3"
    />
  </providers>     
</membership>

효과가 없습니다.MODEL에서 비밀을 찾았습니다. 인터넷 애플리케이션 템플릿을 생성하면 AccountModels.cs에 다음과 같은 "RegisterModel"이 있습니다.

    public class RegisterModel
    {
        [Required]
        [Display(Name = "用户名")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "密码")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "确认密码")]
        [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
        public string ConfirmPassword { get; set; }
    }

Password 속성에는 StringLength->MinimumLength 가 있습니다.내 생각엔 그럴 것 같아!

SimpleMembershipProvider에서 일부 기능이 제거되었습니다. 여기를 참조하세요.http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/

이것이 당신에게 도움이 되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top