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
1 2 3 | 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
1 2 3 4 5 | [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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | [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.
var sorgu = (from i in db.Kullanici where i.Kullanici_Mail.Equals(Kullanici_Mail) select i).SingleOrDefault(); //üyeyi yakaladık
Kısımda sıra birden çok öğe içeriyor diyor
Merhaba şerif,
Sanırım birden çok geliyor hatası almışsın bu şu anlama gelir sorguladığın veri database de iki tane bulunuyor birini silerek sorunu çözebilirsin .