Asp .Net Identity Custom Password Validation

Merhabalar, bu yazımda Asp .Net Identity password validationlarını özelleştireceğiz. Bunun için IPasswordValidator arayüzünü kullanacağız. Hemen başlayalım.

Projemize CustomValidation adlı bir klasör ekliyoruz. İçine CustomPasswordValidator.cs adlı bir class ekliyoruz. Bu class da gerekli ayarlamaları yapabilmek için IPasswordValidator interfaceini miras alıyoruz ve içine TUser olarak “AppUser” classını veriyoruz.

 public class CustomPasswordValidator : IPasswordValidator<AppUser>
    {
        public Task<IdentityResult> ValidateAsync(UserManager<AppUser> manager, AppUser user, string password)
        {
            throw new NotImplementedException();
        }
}

Bu metodun içine hata mesajlarımızı tutması için bir tane List ekliyoruz.

  List<IdentityError> errors = new List<IdentityError>();

Şimdi metodu isteğimize göre değiştireceğiz. Bu yazıda 2 örnek yapacağız.

  • Şifre, kullanıcı adını içeremez.
if (password.ToLower().Contains(user.UserName.ToLower()))
            {
                errors.Add(new IdentityError()
                {
                    Code = "PasswordContainsUserName",
                    Description = "Şifre alanı kullanıcı adı içeremez."
                });
            }

  • Şifre, email adresini içeremez.
  if (password.ToLower().Contains(user.Email.ToLower()))
            {
                errors.Add(new IdentityError()
                {
                    Code = "PasswordContainsEmail",
                    Description = "Şifre alanı Email adresini içeremez."
                });
            }

Yazılan bu validationların hatalarını return etmek kalıyor geriye.

if (errors.Count() == 0)
            {
     return Task.FromResult(IdentityResult.Success);
            }
            else
            {
     return Task.FromResult(IdentityResult.Failed(errors.ToArray()));
            }

Peki şimdi bu validationları nasıl aktif edeceğiz. Onun için Startup.cs classına geliyoruz ve gerekli düzenlemeyi yapıyoruz.

 public void ConfigureServices(IServiceCollection services)
        {
            //
            services.AddIdentity<AppUser, IdentityRole(). 
                AddPasswordValidator<CustomPasswordValidator>().
              AddEntityFrameworkStores<AppIdentityDbContext>().
           AddDefaultTokenProviders();

           //
        }

Eklediğimiz “AddPasswordValidator()” parçası yazdığımız validationların çalışmasını sağlıyor.

Evet bu yazımın sonuna geldik öğrenilen yapı ile dilediğiniz kontrolleri yapabilirsiniz. Bir sonraki yazımda görüşmek üzere. Sağlıcakla kalın.

Bir cevap yazın