يقوم SimpleMembershipProvider MinRequiredPasswordLength دائمًا بإرجاع 0 على الرغم من تعريفه على أنه 6 في قسم موفر عضوية Web.config
-
12-12-2019 - |
سؤال
لقد تحولت إلى 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>
إليك معلومات التصحيح التي أحصل عليها:
أي تلميحات؟
هل 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"]);
المحلول
لقد قمت بالتبديل إلى SimpleMembershipProvider في تطبيق ASP.NET MVC 4.
حسنًا، من القسم ذي الصلة الذي عرضته في ملف 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;
}
}
}
لقد وجدت أنه إذا قمت بوضع 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; }
}
في خاصية كلمة المرور يوجد StringLength->MinimumLength .أنا أعتقد أن هذا هو!
تمت إزالة بعض الميزات في SimpleMembershipProvider، انظر هنا:http://sharifhkhan.com/programming/features-removed-in-simplemembershipprovider/
نأمل أن يكون هذا مساعدتك.