Doğrulama Maili ile Üyelik Aktif Etme

Üyelik işlemlerinde kullanıcının mail adresini doğrulamak gerekebilir. Bu nedenle üyelik esnasında kişinin mail adresini isteyip bu adrese bir doğrulama linki göndermek isteyebilirsiniz.Hadi gelin başlayalım.Önce veritabanını oluşturalım.

Şimdi bir Default.aspx sayfası oluşturalım bu sayfayı üye kayıt ve mail gönderme için kullanacağım. Tasarımı şu şekilde yapalım.

<form id="form1" runat="server">
        <div>
            <table >
                <tr>
                    <td >E-mail</td>
                    <td>
                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td >Şifre</td>
                    <td>
                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td  colspan="2">
                        <asp:Button ID="Button1" runat="server" Text="Kayıt" OnClick="Button1_Click" />
                    </td>
                </tr>
            </table>
        </div>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </form>
Evet kod bölümüne geçip Kayıt butonuna şu kodu yazalım.
 SqlConnection baglanti = new SqlConnection();
    SqlCommand sorgu = new SqlCommand();
    SqlCommand kontrol = new SqlCommand();
    protected void Page_Load(object sender, EventArgs e)
    {
        baglanti.ConnectionString = ("Data Source=DESKTOP-GK2SE36\\SQLEXPRESS;Initial Catalog=uyeDB;Integrated Security=True");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        baglanti.Open();
        kontrol = new SqlCommand("select * from uye_tablo where uye_mail=@uye_mail", baglanti);
        kontrol.Parameters.AddWithValue("uye_mail", TextBox1.Text);
        SqlDataReader dr = kontrol.ExecuteReader();
        if (dr.Read())
        {
            Label1.Text = "Kullanıcı adı sisteme kayıtlıdır, şifrenizi unuttuysanız şifre gönder sayfasına gidiniz.";
        }
        else
        {   //Üye kaydetme bölümü
            dr.Close();
            int uye_onayli = 0;
            string uye_kod1, uye_kod2;
            uye_kod1 = System.DateTime.Now.Millisecond.ToString();
            Random rasgele = new Random();
            int rndsayi = rasgele.Next(1100, 99999999);
            uye_kod2 = rndsayi.ToString();
            SqlCommand sorgu = new SqlCommand("insert into uye_tablo (uye_mail,uye_pass,uye_kod1,uye_kod2,uye_onayli) values (@uye_mail,@uye_pass," + uye_kod1 + "," + uye_kod2 + "," + uye_onayli + ")", baglanti);
            sorgu.Parameters.AddWithValue("@uye_mail", TextBox1.Text);
            sorgu.Parameters.AddWithValue("@uye_pass", TextBox2.Text);
            sorgu.ExecuteNonQuery();
            //Mail gönderme bölümü     
            MailMessage mail = new MailMessage();
            SmtpClient client =new SmtpClient();
            mail.To.Add(TextBox1.Text);
            mail.From = new MailAddress("asasmaz@hotmail.com", "Şaşmaz Corp.");
            mail.Subject = "Mail ile üye kayıt aktivasyonu";
            string yol = "http://" + Request.Url.Authority + "/uye_onayla.aspx?kd1=" + uye_kod1 + "&kod=" + uye_kod2;
            mail.Body = "Üye kayıt işleminin tamamlanması için verilen linke tıklayınız " + yol;
            NetworkCredential onlem = new NetworkCredential("asasmaz@hotmail.com", "Mail şifreniz");
            client.Credentials = onlem;
            client.EnableSsl = true;
            client.Port = 587;
            client.Host = "smtp-mail.outlook.com";
            client.Send(mail);
            Label1.Text = "Kayıt Başarılı bir şekilde sonlandı.";
            baglanti.Close();
        }
    }
Evet basit bir kullanıcı formu ile kullanıcının mailini ve şifresi kaydettik. ve kullanıcıya mail gönderdik.Şimdi uye_onayla.aspx sayfasını oluşturalım Tasarımı şöyle yapalım.

    <form id="form1" runat="server">
    <div>
     <asp:Label ID="Label3" runat="server"></asp:Label>
    </div>
    </form>
Kod bölümüne şu kodu yazalım.
    SqlConnection baglanti = new SqlConnection();
    SqlCommand sorgu = new SqlCommand();
    SqlCommand guncelle;
    protected void Page_Load(object sender, EventArgs e)
    {
        baglanti.ConnectionString = ("Data Source=DESKTOP-GK2SE36\\SQLEXPRESS;Initial Catalog=uyeDB;Integrated Security=True");
        baglanti.Open();
        int kd1, kod2;
        kd1 = Convert.ToInt32(Request.QueryString["kd1"]);
        kod2 = Convert.ToInt32(Request.QueryString["kod"]);
        try
        {
            guncelle = new SqlCommand(("update uye_tablo set uye_onayli=1 where ( uye_kod1=@kd1 and uye_kod2=@kod2)"), baglanti);
            guncelle.Parameters.AddWithValue("@kd1", kd1);
            guncelle.Parameters.AddWithValue("@kod2", kod2);
            guncelle.ExecuteNonQuery();
            Label3.Text = "Başarıyla aktifleştirildi";
        }
        catch (Exception)
        {
            Label3.Text = "aktifleşme  başarısız";
        }
    }
İşlem bu kadar. Onaylama işlemi bittiğinde veritabanı aşağıdaki gibi gözükür.Gelen maildeki linki tıkladığınızda üye_onayli alanındaki 0 bilgisinin 1 olduğu görülüyor.

Onaylama işlemi bitti kullanıcı giriş yapsın o zaman derseniz.Bir Login.aspx sayfası oluşturunuz ve tasarımını şöyle yapınız.

   <form id="form1" runat="server">
    <div>
       <table >
            <tr>
                <td >
                    Kullanıcı adı</td>
                <td >
                    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td >
                    Sifre</td>
                <td >
                    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td  colspan="2">
                    <asp:Button ID="Button1" runat="server" Text="Giriş" OnClick="Button1_Click" />
                </td>
            </tr>
        </table>
    </div>
    <asp:Label ID="Label1" runat="server"></asp:Label>
    </form>
Bu sayfanın koduda şöyle olmalı;
    SqlConnection baglanti = new SqlConnection();
    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlCommand sorgu = new SqlCommand();
        baglanti.ConnectionString = ("Data Source=DESKTOP-GK2SE36\\SQLEXPRESS;Initial Catalog=uyeDB;Integrated Security=True");
        SqlCommand sor = new SqlCommand("select count(*) from uye_tablo where uye_mail=@uye_mail and uye_pass=@pass ", baglanti);
        sor.Parameters.AddWithValue("@uye_mail", TextBox1.Text);
        sor.Parameters.AddWithValue("@pass", TextBox2.Text);
        baglanti.Open();
        int sonuc = Convert.ToInt32(sor.ExecuteScalar());
        SqlCommand sor1 = new SqlCommand("select count(*) from uye_tablo where uye_onayli=@uye_onayli ", baglanti);
        sor1.Parameters.AddWithValue("@uye_onayli", true);
        bool aktif = Convert.ToBoolean(sor1.ExecuteScalar());
        if ((sonuc == 1) && (aktif == true))
        {
            Session["uye"] = "onay";
            Session["uye"] = Session["uye"];
            Response.Redirect("Yetki.aspx");
        }
        else if ((sonuc == 0) && (aktif == false))
            Label1.Text = "kullanıcı girişi yanlış";
        else if ((sonuc == 1) && (aktif == false))
            Label1.Text = "hesap aktif değil";
    }
Onaylı kullanıcı giriş yaptığında ise oturum oluşturup Yetki.aspx sayfasına yönlendirdim.Yetki sayfası;

    <p>Üyelere ozel sayfa</p>
    <form id="form1" runat="server">
        <div>
        </div>
    </form>
ve kod bölümü;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["uye"] == null)
        {
            Response.Redirect("Login.aspx");
        }
    }
Kodu kendinize göre istediğiniz gibi düzenleyebilirsiniz.


Etiketler
Mail Email Eposta Aktivasyon Üye Doğrulama
Mesaj Yaz