Hello i noticed that password complexity setting not working in Register page although property
public PasswordComplexitySetting PasswordComplexitySetting { get; set; }
are defined in RegisterViewModel but still not working how can i fix it ?
8 Answer(s)
-
0
Hi,
Do you have a javascript error on browser console ? And, did you implemented necessary changes for Register.cshtml and Register.js ?
Last thing, can you run the command "window.passwordComplexitySetting" in browser's developer console and share it's value ?
-
0
i have no errors in console window of course i did all the necessary changes in Register.cshtml and Register.js actually i working on the last version v.12.0
this object returned when execute the command "window.passwordComplexitySetting"
Object MaxLength:25 MinLength:6 UseLowerCaseLetters:true UseNumbers:true UsePunctuations:false UseUpperCaseLetters:false __proto__:Object
by the way these are not the values saved in my database
Object MaxLength:25 MinLength:8 UseLowerCaseLetters:true UseNumbers:true UsePunctuations:false UseUpperCaseLetters:true __proto__:Object
and its working just fine in reset password page and user's settings
-
0
Hi,
Can you share your Register.js and Register.cshtml. Maybe you are missing something. A seond eye might catch it, if there is something of course.
-
0
Hi, thank you for coming back
Register.cshtml
@model Umbrella.Web.Models.Account.RegisterViewModel @using System.Web.Script.Serialization @using Abp.Extensions @using Abp.Web.Mvc.Extensions @using Umbrella.MultiTenancy @using Recaptcha.Web @using Recaptcha.Web.Mvc @section Scripts { <script> window.passwordComplexitySetting = @(new JavaScriptSerializer().Serialize(Model.PasswordComplexitySetting).Replace("\"", "")); </script> @Html.IncludeScript("~/Views/Account/Register.js") } <form class="register-form" action="@Url.Action("Register")" method="post"> <h3>@L("SignUp")</h3> @if (@ViewBag.ErrorMessage != null) { <div class="alert alert-danger"> <i class="fa fa-warning"></i> @ViewBag.ErrorMessage </div> } @Html.AntiForgeryToken() @if (ViewBag.IsMultiTenancyEnabled) { if (Model.TenancyName.IsNullOrEmpty()) { <p class="hint hide"> @L("TenantInformations") </p> <div class="form-group hide"> <label class="control-label visible-ie8 visible-ie9">@L("TenancyName")</label> <input class="form-control placeholder-no-fix input-ltr" type="text" placeholder="@L("TenancyName")" name="TenancyName" value="@(Model.TenancyName ?? "Default")" required maxlength="@Tenant.MaxTenancyNameLength" /> </div> } else { <input type="hidden" name="TenancyName" value="@Model.TenancyName" /> } } <input type="hidden" name="IsExternalLogin" value="@Model.IsExternalLogin.ToString()" /> <p class="hint"> @L("PersonalInformations") </p> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("QuadName")</label> <input class="form-control placeholder-no-fix" type="text" placeholder="@L("QuadName")" name="Name" required value="@Model.Name" maxlength="@Umbrella.UmbrellaConsts.MaxNameLength" autocomplete="off" onkeypress="return checkCharacters(event,'ar');" onpaste="return false;"/> @Html.ValidationMessageFor(m => m.Name, "", new { @class = "text-danger" }) </div> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("Mobile")</label> <input class="form-control placeholder-no-fix" type="text" placeholder="@L("Mobile")" name="Mobile" required value="@Model.Mobile" maxlength="@Umbrella.UmbrellaConsts.MaxMobileLength" data-val-regex="@L("InvalidMobile")" data-val-regex-pattern="05(0|3|5|4|6|8|9)[0-9]{7}" data-val="true" autocomplete="off" onkeypress="return checkNumbers(event)" onpaste="return false;"/> @Html.ValidationMessageFor(m => m.Mobile, "", new { @class = "text-danger" }) </div> @*<div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("Surname")</label> <input class="form-control placeholder-no-fix" type="text" placeholder="@L("Surname")" name="Surname" required value="@Model.Surname" maxlength="@Umbrella.Authorization.Users.User.MaxSurnameLength" /> </div>*@ <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("EmailAddress")</label> <input class="form-control placeholder-no-fix" type="email" placeholder="@L("EmailAddress")" name="EmailAddress" value="@Model.EmailAddress" maxlength="@Umbrella.Authorization.Users.User.MaxEmailAddressLength" autocomplete="off" onkeypress="return checkEnglishAndNumbersAtSymbol(event);" onpaste="return false;" /> @Html.ValidationMessageFor(m => m.EmailAddress, "", new { @class = "text-danger" }) </div> @if (!Model.IsExternalLogin) { <p class="hint"> @L("AccountSettings") </p> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("IdentityNumber")</label> <input class="form-control placeholder-no-fix input-ltr" type="text" autocomplete="off" placeholder="@L("IdentityNumber")" name="UserName" value="@Model.UserName" required maxlength="@Umbrella.UmbrellaConsts.MaxIdentityLength" data-val-regex="@L("InvalidIdentityNumber")" data-val-regex-pattern="10[0-9]{8}" data-val="true" onkeypress="return checkNumbers(event)" onpaste="return false;"/> @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" }) </div> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("Password")</label> <input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="RegisterPassword" placeholder="@L("Password")" name="Password" required data-val="true" onpaste="return false;"/> @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" }) </div> <div class="form-group"> <label class="control-label visible-ie8 visible-ie9">@L("PasswordRepeat")</label> <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="@L("PasswordRepeat")" name="PasswordRepeat" required data-val="true" data-val-equalto-other="Password" data-val-equalto="@L("PasswordNotMatch")" onpaste="return false;"/> @Html.ValidationMessageFor(m => m.PasswordRepeat, "", new { @class = "text-danger" }) </div> } @if (ViewBag.UseCaptcha) { <p class="hint"> @L("Captha_Hint") </p> <div class="form-group margin-bottom-20"> @Html.Recaptcha(theme: RecaptchaTheme.Red) </div> } <div class="form-actions"> <a href="@Url.Action("Login","Account")"><button type="button" id="register-back-btn" class="btn btn-default">@L("Back")</button></a> <button type="submit" id="register-submit-btn" class="btn btn-primary uppercase">@L("Submit")</button> </div> </form>
Register.js
var CurrentPage = function () { jQuery.validator.addMethod("customUsername", function (value, element) { if (value === $('input[name="EmailAddress"]').val()) { return true; } return !$.validator.methods.email.apply(this, arguments); }, abp.localization.localize("RegisterFormUserNameInvalidMessage")); var _passwordComplexityHelper = new app.PasswordComplexityHelper(); var handleRegister = function () { $('.register-form').validate({ errorElement: 'span', //default input error message container errorClass: 'help-block', // default input error message class focusInvalid: false, // do not focus the last invalid input ignore: "", rules: { PasswordRepeat: { equalTo: "#RegisterPassword" }, UserName: { required: true, customUsername: true } }, messages: { }, invalidHandler: function (event, validator) { }, highlight: function (element) { $(element).closest('.form-group').addClass('has-error'); }, success: function (label) { label.closest('.form-group').removeClass('has-error'); label.remove(); }, errorPlacement: function (error, element) { if (element.closest('.input-icon').size() === 1) { error.insertAfter(element.closest('.input-icon')); } else { error.insertAfter(element); } }, submitHandler: function (form) { form.submit(); } }); $('.register-form input').keypress(function (e) { if (e.which == 13) { if ($('.register-form').valid()) { $('.register-form').submit(); } return false; } }); var $element = $('#RegisterPassword'); _passwordComplexityHelper.setPasswordComplexityRules($element, window.passwordComplexitySetting); } return { init: function () { handleRegister(); } }; }();
Note that i'm using jquery unobtrusive validation because i need ti use regex annotation in RegisterViewModel , as jquery validation will not show up validation message if i didn't add some attributes to Password Input
RegisterViewModel
public class RegisterViewModel : IValidatableObject { /// <summary> /// Not required for single-tenant applications. /// </summary> [StringLength(Tenant.MaxTenancyNameLength)] public string TenancyName { get; set; } [Required] [StringLength(UmbrellaConsts.MaxNameLength)] public string Name { get; set; } //[Required] [StringLength(UmbrellaConsts.MaxNameLength)] public string Surname { get; set; } [StringLength(User.MaxUserNameLength)] [RegularExpression("10[0-9]{8}")] public string UserName { get; set; } //[Required] [EmailAddress] [StringLength(User.MaxEmailAddressLength)] public string EmailAddress { get; set; } [Required] [StringLength(User.MaxPlainPasswordLength)] [DisableAuditing] public string Password { get; set; } [Required] [StringLength(User.MaxPlainPasswordLength)] [DisableAuditing] public string PasswordRepeat { get; set; } public bool IsExternalLogin { get; set; } public PasswordComplexitySetting PasswordComplexitySetting { get; set; } [Required] [StringLength(UmbrellaConsts.MaxMobileLength)] [RegularExpression("05(0|3|5|4|6|8|9)[0-9]{7}")] public string Mobile { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (!UserName.IsNullOrEmpty()) { if (!UserName.Equals(EmailAddress) && new ValidationHelper().IsEmail(UserName)) { yield return new ValidationResult("Username cannot be an email address unless it's same with your email address !"); } } } }
by the way the same situation in reset password page but i didn't made any changes on that page , the validation show up tell me that password should contains small letter but it accept from me numbers only but if i set settings the password should contains both small and uppercase letter it works just fine Thank you for your concern
-
0
Hi,
I couldn't find the problem on your files. Can you send your project via email ?
-
0
ok please provide me with your email or should i use this one <a href="mailto:[email protected]">[email protected]</a>
-
0
Hi,
Yes, please send to <a href="mailto:[email protected]">[email protected]</a>. Thanks.
-
0
sent waiting for your response