ASP.NET MVC Reset Password

7 May

Bir çok web sitesinin klasik bölümüdür şifremi unuttum bölümü. Kullanıcı adınızı veya email adresinizi girersiniz ve mail adresinize postalanır yeni şifreniz. Peki bu senaryo ASP.NET  MVC ile Membership yapısı kullanılarak nasıl yapılır? Yani kullanıcı şifresi resetlenir (reset password) ve yeni şifre mail olarak gönderilir.

Bu işlem için önce sistemimizin konfigurasyonunu mail gönderebilecek şekilde hazırlamamız gerekmektedir.


<system.net>
    <mailSettings>
       <smtp deliveryMethod="Network">
         <network host="mailhostadresiniz" (örneğin smtp.gmail.com)
                  port="587"
                  userName="emailadresiniz"
                  password="sifreniz"
                  enableSsl="true"/> (SSL gerektiren mail sunucu kullanıyorsanız)

       </smtp>
    </mailSettings>
</system.net>

Sistemimiz mail gönderemeye hazır bir vaziyete gelmiş durumda.

ASP.NET MVC projemizde Models dizinindeki Account model içerisine yeni bir model tanımlamalıyız. Bu modelin adı LostPasswordModel olacak.


public class LostPasswordModel
{
     [Required(ErrorMessage = "Kullanıcı adınızı giriniz.")]
     [Display(Name="Kullanıcı Adı")]
     public string Username { get; set; }
}

Bu model ile kullanıcıdan kullanıcı adını talep ederek mail adresine yeni şifresini göndereceğiz.

Bu modelden gelen kullanıcı adını alarak o kullanıcının şifresini sıfırlayıp, yeni mail adresine postalamalıyız. Bu işlemi yapmak için aşağıdaki metodu tanımlayabiliriz.

public void ResetPassword(string username)
{

     MembershipUser user = Membership.GetUser(username);

     string confirmationGuid = user.ProviderUserKey.ToString();
     string newPassword = user.ResetPassword();
     string bodyMessage = string.Format("Yeni Şifreniz {0}",newPassword);

     var message = new System.Net.Mail.MailMessage("kimden@mail.com", user.Email)
     {
         Subject = "Yeni şifre oluşturma isteği.",
         Body = bodyMessage
     };

     var client = new System.Net.Mail.SmtpClient();
         client.Send(message);
}

Bu metod sayesinde kullanıcının mail adresine yeni şifresini postalamış olduk.

ASP.NET MVC Email Doğrulama (Verification)

6 May

ASP.NET üyelik sistemlerinde bir gelenek olan üyelerin email adreslerini doğrulama işleminden bahsedelim birazda. Sistemimize üye olanları email adresleri aracılığıyla gerçek kullanıcı olup olmadıklarını anlayabiliriz bu sayede. Bu işlem için sistemin konfigurasyonlarının mail gönderebilecek hale getirilmesi gerek. Yani mail ayarları yapılmalıdır.


<system.net>
   <mailSettings>
      <smtp deliveryMethod="Network">
           <network host="mailhostadresiniz" (örneğin smtp.gmail.com)
                    port="587"
                    userName="emailadresiniz"
                    password="sifreniz"
                    enableSsl="true"/> (SSL gerektiren mail sunucu kullanıyorsanız)
      </smtp>
   </mailSettings>
</system.net>

Bu ayarlar yapıldıktan sonra üyelerin kayıtlarının yapıldığı sırada bir doğrulama postasının otomatik olarak gönderilmesi gerekir. Bu işlemi yapan metodu hazırlamalıyız.


public void SendConfirmationEmail(string username)
{

      MembershipUser user = Membership.GetUser(username);

      string confirmationGuid = user.ProviderUserKey.ToString();
      string verifyUrl = System.Web.HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +
                         "/Account/Verify?Id=" +
                         confirmationGuid;

      string bodyMessage = string.Format("üyeliğiniz başarıyla oluşturulmuştur. Aşağıdaki linke tıkladığınızda hesabınızın aktif olacaktır.\n");
             bodyMessage += verifyUrl;

      var message = new System.Net.Mail.MailMessage(Models.Configuration.SystemMail, user.Email)
      {
          Subject = "Üyeliğinizi doğrulayın.",
          Body = bodyMessage
      };

     var client = new System.Net.Mail.SmtpClient();
         client.Send(message);

}

Mail gönderen metodumuz da artık hazır olduğuna göre bu metodu kayıt işlemi sırasında kullanabiliriz.


[HttpPost]
public ActionResult Register(RegisterModel model)
{

   if (ModelState.IsValid)
   {
       MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email, false);

       if (createStatus == MembershipCreateStatus.Success)
       {
            SendConfirmationEmail(model.UserName);

            return RedirectToAction("Confirmation","Account");
       }
       else
       {
            ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
       }

    }

    return View(model);

}

Artık kayıt olan üyelere otomatik olarak mail gönderiliyor.

Bu linke tıklandığında, üye Account controller içindeki Verify action metoduna yönlendirilecektir.


public ActionResult Verify(string Id)
{
     MembershipUser user = Membership.GetUser(new Guid(Id));

     user.IsApproved = true;
     Membership.UpdateUser(user);

     return RedirectToAction("Welcome");
}

Bu action metod sayesinde linke tıklayan üyenin üyeliği aktif hale getirilmiş oldu.