Önceki Yazı : Asp.Net Mvc – Yeni Üye Kaydı ve Dosya Yükleme - Üyelik Sistemi 1 (Asp.Net Mvc Yazı Dizisi – 20)
Merhaba Arkadaşlar,
Geliştirmekte olduğumuz blog projesinde, bir önceki derste yeni üyelik ve resim yükleme işlemlerini incelemiştik.
Önceki yazımızda, bir takım değişiklikler ve eklemeler yaptım. Eğer makaleyi 06.04.2014 tarihinden önce okuduysanız, makaleyi tekrar incelemenizi ve projenin son halini tekrar indirmenizi özellikle tavsiye ediyorum.
Bugünkü dersimizde ise, üye girişi işlemlerini yapıyor olacağız. Bu sistem bize aynı zamanda yetkilendirmeyi de sağlıyor olacak. Burada önemli olan nokta, üyelik için kendi yapımızı kullanıyor olmamız. Microsoft'un Asp.Net Membership, * Simple Membership*(Mvc 4) gibi yapıları bulunmakta ve işlerini çok iyi bir şekilde yapmaktadır. Ancak istedim ki, işin mantığını daha iyi anlayalım. Yoksa Membership ile alakalı yığınla makale internette bulunabilir.
Üye Girişi
public ActionResult UyeGiris()
{
return View();
}
Görüldüğü üzere, geriye View'imizi döndüren, Action'umuzu ekledik.

Ajax : Ajax teknolojisi, Html, Javascript işlemlerinin asenkron olarak yapılması demektir. Yani bir şey ile ilgili bir talep sunucuya gönderildiğinde, sunucu gerekli cevabı verir. Bu cevap javascript tarafından sayfanın her hangi bir yerine yansıtılır. Bu noktada sayfanın tamamı, sunucuya gidip gelmez ve sayfa yenilenmez. Böylelikle hem çok ciddi performans kazancımız olur, hemde site yerel bir uygulama gibi görüntülenir. Yeni web dünyasının vazgeçilmezidir.




Resimleri takip ederek kurulumu yaptık.
BundleConfig
bundles.Add(new ScriptBundle("dosya sıkıştırılıp, gösterilecek yer").Include("asıl dosyanın yolu"));
bundles.Add(new StyleBundle("dosya sıkıştırıp, gösterilecek yer").Include("asıl dosyanın yolu"));
şeklinde dosyalarımızı ekleyebiliyoruz. Şimdijquery.unobtrusive-ajax dosyamızı ekleyebiliriz.
//Mvc Ajax işlemleri için aşağıdaki dosyamızı ekledik.
bundles.Add(new ScriptBundle("~/bundles/jquery-unobtrusive").Include(
"~/Scripts/jquery.unobtrusive-ajax.js"));
* Dosyamızı kaydettikten sonra, bu dosyamızın, tüm View sayfaları tarafından kullanılmasını sağlamak amacıyla, **Views>
Shared>_Layout.cshtml** dosyamızı açalım.
@Scripts.Render("~/bundles/jquery")
satırından sonraki satıra,
<!--Ajax işlemleri için gereken dosyamızı burada tüm sayfalarda kullanılacak şekilde tanıttık.
Ayrıca dosyanın orijinal yolunu değil, bizim belirlediğimiz ~/bundles/jquery-unobtrusive
yolunun kullanıldığına dikkat edin.-->
@Scripts.Render("~/bundles/jquery-unobtrusive")
kodunu ekleyelim ve dosyayı kaydedelim.
<!--Her hangi bir model kullanmadık burada doğrulamayı kendimiz elle yapacağız-->
@{
ViewBag.Title = "Üye Girişi";
}
<!--Layout sayfamızda sayfanın en alt kısmında scripts adlı bir sectionumuz tanımlanmıştı.
Script ve css kodlarımızı scripts sectionuna koyacağız.
Detaylı bilgi önceki yazılarımızda vardır.-->
@section scripts{
<style type="text/css">
#formKapsayici {
box-shadow: 0 0 5px gray;
padding: 25px;
height: 500px;
}
#divSol, #divSag {
float: left;
margin-left: 25px;
}
#divSol *, #divSag * {
margin-top: 15px;
}
input[type="text"] {
width: 250px;
}
#btnUyeOl {
/*clear komutu ile önceki divlerin sola yaslanarak sıralanmasında, butonun bu yaslanmaya
uymayıp alt satıra inmesini sağlıyoruz*/
clear: both;
display: block;
margin-left: 132px;
}
#divSonuc {
color: red;
}
</style>
}
<h2>Üye Girişi</h2>
@using (Ajax.BeginForm("UyeGirisi", "Uyelik", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divSonuc" },
new { id = "formKapsayici" }))
{
<div id="divSol">
@Html.Label("E-Posta Adresiniz")<br />
@Html.Label("Şifreniz")
</div>
<div id="divSag">
: @Html.TextBox("txtPosta")<br />
: @Html.Password("pswSifre")
</div>
<input type="submit" value="Üye Ol" id="btnUyeOl" />
<div id="divSonuc"></div>
}
[HttpPost]
public string UyeGirisi()
{
//Request.Form["html elementinin name özelliği"] ile Post edilen formdaki elemanların
//değerlerini alabiliyoruz. Bu metod yalnızca Post ile çalışır.
string posta = Request.Form["txtPosta"];
string sifre = Request.Form["pswSifre"];
if (String.IsNullOrEmpty(posta) && String.IsNullOrEmpty(sifre))
{
return "E-Posta adresinizi ve şifrenizi girmediniz.";
}
else if (String.IsNullOrEmpty(posta))
{
return "E-posta adresinizi girmediniz.";
}
else if (string.IsNullOrEmpty(sifre))
{
return "Şifrenizi girmediniz.";
}
else
{
using (MvcProjesiContext db = new MvcProjesiContext())
{
//Normalde şifreyi hashleyerek yazdırmamız ve kontrol etmemiz gerekir.
var uye = (from i in db.Uyes where i.Sifre == sifre && i.EPosta == posta select i).SingleOrDefault();
if (uye == null) return "Kullanıcı adınızı ya da şifreyi hatalı girdiniz.";
//Session'da müşteri ile ilgili bilgileri saklamaktayız.
//Güvenlik açısından bilgileri şifreleyerek saklamamız daha doğru bir yöntemdir.
//Asp.Net Membership yapısı, bu güvenliği sunmaktadır.
Session["uyeId"] = uye.UyeId;
//Burada eğer, kullanıcı bilgileri, sistemde eşleşirse, geriye girişin başarılı
//olduğuna dair bir mesaj ve 3 saniye sonra, ana sayfaya yönlendirecek bir
//javascript kodu ekliyoruz.
return "Sisteme, başarıyla giriş yaptınız.
<script type='text/javascript'>setTimeout(function(){window.location='/'},3000);</script>";
}
}
}
Evet arkadaşlar, böylelikle projemizi bitirmiş olduk.
Basit bir projenin yapımının, 21 makalelik bir ders halinde olması, aslında kurumsal bir projenin ne kadar daha ağır olacağını göstermektedir.
Ben elimden geldiğince, değişik yöntemlerle anlatım yapmaya çalıştım. Her yerde bulabileceğiniz bilgilerin, dışına çıkmaya gayret gösterdim. Bununla birlikte, projeyi mümkün olduğunca sade tutmaya çalıştım. Bu yüzden, projede, güvenlik anlamında hiç bir önlem almadık.
Umarım sizlere faydası olmuştur.
Sonraki yazımda, kurumsal ölçekte bir proje geliştirirken nasıl bir yol izlemeliyiz, hangi kütüphaneleri kullanmalıyız, hangi standartlara göre kod yazmalıyız, ona değineceğim. Böylelikle serimizi bitirmiş oluyoruz.
Projenin son haliniburadan indirebilirsiniz.
Hepinize kolaylıklar diliyorum.