46 Şifre değiştir

Şifre değiştirme işlemlerini yapmak için form içinde yer alması gereken bilgileri içeren bir model tanımlamamız gerekiyor. Sifre, SifreTekrari ve kimin işlem yaptığını anlayabilmek için Username ,Id veya Email gibi benzersiz olan bir kimlik alanı gerkecek. Bu modeli oluşturmak için daha önce tanımladığımız SifreTemel modelinin temel alacağız.

Models\SifreDegistir.cs

using System.ComponentModel.DataAnnotations;

public class SifreDegistir:SifreTemel
{
   [Required]
    public string Username { get; set; }
}

Bu sayfaya sadece üyelerin erişebilmesi için [Authorize] anahtar kelimesini kullanıyoruz.

HesapController.cs içine aşağıdaki kodları ekliyoruz.

[Authorize]
        public async Task<IActionResult> SifreDegistir()
        {
            SifreDegistir model = new SifreDegistir();
            //giriş yapmış olan kullanıcının adını modele gönderiyoruz
            model.Username = User.Identity.Name;
            return View(model);
        }

Views\Hesap\SifreDegistir.cshtml içine aşağıdaki kodları yazıyoruz.

@model SifreDegistir
@{
    ViewData["Title"] = "şifre degiştir";
}

<h1 class="text-center">Şifre değiştir</h1>
<form  method="post" asp-antiforgery="true">
<div asp-validation-summary="All"></div>
<input type="hidden" asp-for="Username">
<div class="row mt-3">
    <div class="col-3">
        <label asp-for="Sifre" class="control-label"></label>
    </div>
    <div class="col-9">
        <input asp-for="Sifre" class="form-control"/>
    </div>
</div>
<div class="row mt-3">
    <div class="col-3">
        <label asp-for="SifreTekrari" class="control-label"></label>
    </div>
    <div class="col-9">
        <input asp-for="SifreTekrari" class="form-control"/>
    </div>
</div>
<div class="row mt-3">
            <div class="col-3"></div>
            <div class="col-9">
                <button type="submit" class="btn btn-primary">Değiştir</button>
                <button type="reset" class="btn btn-danger">Sıfırla</button>
            </div>
        </div>
</form>

HesapController.cs içine aşağıdaki kodları ekliyoruz

Bu sayfaya sadece üyelerin erişebilmesi için [Authorize] anahtar kelimesini kullanıyoruz. Şifre işlemleri için UserManager nesnesinin imkanlarını kullanacağız. Şifre değiştirme başarılı olur olursa _basarili.cshtml içine mesaj gönderip görünmesini sağlayacağız. Eğer işlem başarılı olmazsa aynı sayfa için de hata mesajının görünmesini sağlayacağız.

[HttpPost]
        [ValidateAntiForgeryToken]
        [Authorize]
        public async Task<IActionResult> SifreDegistir(SifreDegistir model)
        {
            if (ModelState.IsValid)
            {
                //kullanıcı adından kullanıcı bilgilerini alıyoruz
                var kullanici = await userManager.FindByNameAsync(model.Username);
                //Şifre için token oluşturuyoruz
                var token = await userManager.GeneratePasswordResetTokenAsync(kullanici);
                //Şifreyi değiştirmei deniyoruz
                var sonuc = await userManager.ResetPasswordAsync(kullanici, token, model.Sifre);
                if (sonuc.Succeeded)
                {
                    //Hata yok ise , başarılı ekranına gönderiyoruz
                    //Email ile bildir
                    string mesaj=$"Merhaba {kullanici.Ad} {kullanici.Soyad} <br> Şifreniz {DateTime.Now} tarihinde değiştirildi.";
                    Islemler.MailGonder("Şifreniz değiştirildi",mesaj,kullanici.Email);
                    return View(@"Views\Shared\_basarili.cshtml", "Şifreniz başarıyla değiştirildi");
                }
                else
                {
                    // hata var ise aynı ekranda görünmesi için modele oluşan hataları ekliyoruz
                    ModelState.AddModelError("", string.Join("<br>", sonuc.Errors.Select(x => x.Description).ToList()));
                    return View(model);
                }
            }
            return View(model);
        }

Yorum yapın