1

SimpleMembershipProviderASP.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>

取得したデバッグ情報は次のとおりです。

ここに画像の説明を入力

ヒントはありますか?

SimpleMembershipProviderWeb.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"]);
4

3 に答える 3

3

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 によるこれらのプロパティの設定をサポートしていないと言われています。それさえ使わない。そのような機能が必要な場合は、自分で実装する必要があります。

于 2012-10-03T06:44:56.947 に答える
3

から継承し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;
        }
    }
}
于 2012-12-05T10:12:59.487 に答える
0

次のように、minRequiredPasswordLength="3" を web.config に入れるとわかりました。

<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/

これがお役に立てば幸いです。

于 2013-11-26T01:22:21.770 に答える