Asp.Net Mvc Random Key Ürettirip Mail Gönderme Mantığı

Bugün ki konumuzda örneğin şifremi unuttum sistemi yapacaksınız ve bu şifre mi unuttum sistemi için  kullanıcı ya nasıl 5 haneli kod göndereceksiniz onu anlatacağım.

Öncelikle işin mantığı şu olacak üye mail adresini yazacak ve biz üyenin mail adresini alıp veritabanımızda böyle bir üyelik var mı diye karşılaştıracağız var ise o üyenin Üyeler Tablosundaki ResetPw kolonuna   5 haneli bir kod üreteceğiz ve bunu Guid İle yapacağız.

Öncelikle Nedir Bu Guid Diyeceksiniz Hemen Cevaplayalım

Guid IIS tarafında oluşturulmuş  32 Unique  karakter içerir Harfler ve Sayılardan Oluşur

Biz burada ilk 5 harfi Substring ile alacağız ve kodu mail olarak göndereceğiz.

Başlangıçta bir Database oluşturuyorum

create database GuidKullanimi
use GuidKullanimi
create table AppUser(UserID int identity primary key,Email nvarchar(50),Password nvarchar(50),IsActive bit,IsResetPw nvarchar(10))

          EntityFrameWork Kullanacağım için UserID’ye Primary Key’imi ekledim. Daha sonra

Database’de IsResetPw adlı bir kolon oluşturdum ve nvarchar(10) 10 karater izni verdim 5 de yapabilirdim ileride sorun çıkarmaması adına fazla verdim.

Bir Projemde Bir Adet Controller Açıyorum Sizde Varsa Action Eklersiniz Ayrıca Ado.Net Modelinizin olduğunu varsayıyorum.

İlk Önce html yani View’ı döndüren Actionu yazdım altına da  butona bastıktan sonra çalışacak olan postu yazacağım.

HttpGet de ekledim ki bunun View Olduğunu Anlayayım hemde View işlemi görsün.

Get Action’u

  [HttpGet]
public ActionResult ResetPassword()
        {
            return View();
        }

Birde Basit Html Sayfasını Yazalım

daha kolay ve basit ve düzgün görünüm olması için Bootstrap kullandım. ve html beginform’u ekledim çünkü  gönder butanuna basınca aynı metodda post metodunu çalıştırsın diye yaptım anca post Actionun yazmadım hemen yazıyorum

Görünümü

ViewKodu

@using (Html.BeginForm("ResetPassword", "Home", FormMethod.Post))
{


<div class="form-group">

    <div class="form-group">

        <input type="email" name="Email" placeholder="Email Adresiniz" />
    </div>
    <div class="form-group">
    <input type="submit" value="Şifreyi Sıfırla" class="btn btn-success" />
    </div>

</div>
}

Post Action’u

[HttpPost]
        public ActionResult ResetPassword(string Email)
        {
            GuidKullanimiEntities db = new GuidKullanimiEntities(); //instance aldık

            var sorgu = (from i in db.AppUser where i.Email.Equals(Email) select i).SingleOrDefault(); //üyeyi yakaladık

            if (sorgu != null) //üyevarsa kod yolladık 
            {
                 Guid randomkey = Guid.NewGuid(); //32 karakterli kodu ürettik

                sorgu.IsResetPw = randomkey.ToString().Substring(0, 5);///keyi ekleyip veritabanına ekledik

                db.SaveChanges(); //kaydettik

                SmtpClient client = new SmtpClient("mail.server.com");
                MailAddress from = new MailAddress("info@server.com");
                MailAddress to = new MailAddress(sorgu.Email);// userin mailini yazdık
                MailMessage msg = new MailMessage(from, to);
                msg.IsBodyHtml = true;
                msg.Subject = "Şifre Degiştirme İsteği Bildirimi";
                msg.Body += "<h2>  Merhaba " + sorgu.Email + " Şifre Degiştirme İsteğiniz Alınmıştır.  Kodunuz" +randomkey.ToString().Substring(0,5)  + "  Sitemize girerek şifrenizi Güncelleyiniz </h2>  </br>  "; //randomkeyimizi 5 karatere düşdük
                NetworkCredential info = new NetworkCredential("info@server.com", "sifreniz");
                client.Credentials = info;
                client.Send(msg); ///gönderdik

            }

            return RedirectToAction("Index","Home");
        }

Burada ilk önce Ado.net modelimin Instancesini aldım

Sorgumu yazdım ve üyeyi yakaladım

İf ile sorgu null gelmemişse diye kontrol ettim

Guid ile random keyimi ürettim

Veritabanını güncelledim.

Mail kurulumları mı yaptığım mailde bodynin içerisine randomkeyi ekledim substring ile 5 karaktere düşürdüm.

Resetleme Kodu:

Buradan sonra ki işlem email adresine şifre sıfırlama linki ekleme ve şifre sıfırlama actionu’nu yazmak ben bu kadar ilerletmeyeceğim benim amacım Guid mantığını öğretmek ve kullanım alanlarını genişletmek.

Furkan Yüksel: Kendi halinde yeniliklere açık öğrendiği yeni şeyleri paylaşan Nişantaşı Üniversitesi Mezunu .Net Developer :)
İlgili Yazı