Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET Core Identity – Üye Bilgileri Güncelleme – XII

Merhaba,

Asp.NET Core Identity yazı dizisinin 11. makalesinde, kayıt işlemi gerçekleşen ve Cookie bazlı doğrulama neticesinde o an oturum açan kullanıcının bilgilerini güncellemeyi ve bunun yanında bilgileri güncellenen kullanıcıyı oturumdan düşürmeksizin yeni bir cookie oluşturmanın nasıl yapıldığını inceleyeceğiz.

İlk olarak kullanıcı bilgileri güncellendiği taktirde o an mevcut oturumdaki kullanıcıyı güncelleyebilmek için yeni cookie değerlerinin nasıl oluşturulacağını ve kullanıcıya hiç sezdirmeden çıkış ve giriş işlemlerinin nasıl yapılacağını programatik olarak inceleyelim.

Kullanıcıya Kod İle Yeni Cookie Oluşturma

Yapısal olarak bu işlem için ilk olarak kullanıcının “SecurityStamp” değerini güncellememiz ve ardından kullanıcıya çıkış yaptırıp, tekrar giriş yaptırmamız yeterli olacaktır.

                AppUser user = await _userManager.FindByNameAsync(User.Identity.Name);
.
.
.
                await _userManager.UpdateSecurityStampAsync(user);
                await _signInManager.SignOutAsync();
                await _signInManager.SignInAsync(user, true);
.
.
.

Şimdi bu manevra eşliğinde kullanıcının kritik bilgilerini değiştirebiliriz. Gelin buna üye bilgilerini değiştirerek başlayalım.

Üye Bilgilerini Değiştirme

        readonly UserManager<AppUser> _userManager;
        readonly SignInManager<AppUser> _signInManager;
        public UserController(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
        {
            _userManager = userManager;
            _signInManager = signInManager;
        }
        .
        .
        .
        [HttpPost]
        public async Task<IActionResult> EditProfile(UserDetailViewModel model)
        {
            if (ModelState.IsValid)
            {
                AppUser user = await _userManager.FindByNameAsync(User.Identity.Name);
                user.PhoneNumber = model.PhoneNumber;
                IdentityResult result = await _userManager.UpdateAsync(user);
                if (!result.Succeeded)
                {
                    result.Errors.ToList().ForEach(e => ModelState.AddModelError(e.Code, e.Description));
                    return View(model);
                }
                await _userManager.UpdateSecurityStampAsync(user);
                await _signInManager.SignOutAsync();
                await _signInManager.SignInAsync(user, true);
            }
            return RedirectToAction("Index");
        }

Görüldüğü üzere üye bilgilerini değiştirebilmek için “UserManager” nesnesi aracılığıyla elde edilen üyenin tüm bilgilerini post neticesinde gelen viewmodel’de ki verilerle değiştiriyoruz… Ardından 18. satırda olduğu gibi UpdateAsync metoduyla kullanıcının son güncel bilgilerini veritabanına yansıtıyoruz. 24 ile 26. satır aralığına dikkat ederseniz eğer yapılan veritabanındaki kritik değişikliklerden dolayı kullanıcı oturumunu düşürüp yeniden açıyoruz.

Benzer olarak üyenin şifresini değiştirebilmeyi inceleyelim…

Üye Şifresini Değiştirme

        readonly UserManager<AppUser> _userManager;
        readonly SignInManager<AppUser> _signInManager;
        public UserController(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
        {
            _userManager = userManager;
            _signInManager = signInManager;
        }
        .
        .
        .
        [HttpPost]
        public async Task<IActionResult> EditPassword(EditPasswordViewModel model)
        {
            if (ModelState.IsValid)
            {
                AppUser user = await _userManager.FindByNameAsync(User.Identity.Name);
                if (await _userManager.CheckPasswordAsync(user, model.OldPassword))
                {
                    IdentityResult result = await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);
                    if (!result.Succeeded)
                    {
                        result.Errors.ToList().ForEach(e => ModelState.AddModelError(e.Code, e.Description));
                        return View(model);
                    }
                    await _userManager.UpdateSecurityStampAsync(user);
                    await _signInManager.SignOutAsync();
                    await _signInManager.SignInAsync(user, true);
                }
            }
            return RedirectToAction("Index");
        }

Yukarıdaki kod bloğunu incelerseniz eğer 17. satırda “CheckPasswordAsync” metodu ile kullanıcıdan alınan eski şifre doğrulanmakta ve 19. satırda ise “ChangePasswordAsync” metodu ile eski şifre yenisiyle değiştirilerek güncellenmektedir. Devamında ise yeniden oturuma dair gir çık yapılarak kullanıcıya dair nesneyi güncel haliyle tazeliyoruz.

Böylece bir üyenin bilgilerini değiştirmeyi ve yapılan değişiklikler neticesinde üyenin yeniden oturum açmasına gerek görmeksizin oturumunu tazelemeyi görmüş olduk. Sonraki içeriğimizde oturum açan üyenin çıkış işlemlerine kısaca değineceğiz. O halde şimdilik görüşmek üzere…

İlgilenenlerin faydalanması dileğiyle…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. bilisimtech dedi ki:

    Sayenizde Identity yapısını oluşturuyorum. Çok teşekkürler. Allah zamanınızı bereketlendirsin.

  1. 06 Eylül 2019

    […] Asp.NET Core Identity – Üye Bilgileri Güncelleme – XII […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir