1
2011
cakephp ile admin panel login logout
Merhaba arkadaşlar cake php ile admin panel şifreleme işlemini anlatmak istiyorum sürekli olarak farklı çözümler ürettiğim bu konu hep sıkıtıntılı olan konulardan birisidir cakephp bu işlem için hazır sınıfları var ama onu kullanmadan bir çözüm ürettim.
Öncelikle yöneticilerimizi tutacağımız bir admin tablosunu ihtiyacımız olacak bu örnekte tablo adı admin kolonlarıda sırası ile
user pass aktif
öncelikle sistem şu şekilde işliyor admin de yaptığımız sayfaların bir layoutu var adı index.ctp birde giriş yapabilmek için hazırladığımız formun olduğu başka bir layoutumuz var login.ctp
ilk önce index.ctp mize gelen herkesin bir admin kontrolundan geçmesi gerek o yüzden index.ctp nin en başına
$login=$this->requestAction('/functions/logincheck');
if($login!=true)
{ ?>
<script type="text/javascript">
location.href="/admin";
</script>
}
<?php die;
kodunu ekliyoruz bu kodda
$login=$this->requestAction('/functions/logincheck');
parçası functions controllerindeki logincheck fonksiyonuna bir istek göderiyor ve ordaki return edilen değişkeni $login değişkenine set ediyor
diğer kısımsa anlaşılacağı gibi eğer gelen değişken true değilse sayfamızı admin controllerindeki index fonksiyonuna yolluyor. ve die ile sayfayı öldürüyoruz javascriptte sorun olursa sayfa yüklenmesin diye.
function logincheck()
{
return $this->Session->read("login");
}
buda functions controllerindeki logincheck fonksiyonu tek yaptığı session daki değeri geri döndürüyor (bu fonksiyonu istediğiniz controller altına taşıyabilirsiniz admin controllerinde de olabilir)
gelelim admin controllerının index fonksiyonuna ve bu fonksiyona ait view e
function index(){
$this->layout = "../layouts/adminpanel/login";
}
bu admin kontrollerindeki index fonksiyonu tek yaptığı işlem layout u login layout u olarak set ediyor
login layoutu içerisinde de bir login formu var kullanıcı adı ve parola alanı olan
<form class="niceform" action="/tr/admin/login" method="post">
<fieldset>
<dl>
<dt>
<label for="email">Username:</label>
</dt>
<dd><input id="" type="text" name="data[admin][username]" size="54" />
</dd>
</dl>
<dl>
<dt><label for="password">Password:</label></dt>
<dd><input id="" type="password" name="data[admin][pass]" size="54" /></dd>
</dl>
<input id="submit" type="submit" name="submit" value="Giriş" /></fieldset>
</form>
input ların isimlerine dikkat ediyoruz içerisine yazılanlar controllerdan okuman için bu şekilde bir isim verdik
bu inputların içerisinde bulunan form un da actionu
/admin/login yani admin controllerindeki login fonksiyonu çalışıyor.
function login()
{
$admin=$this->data["admin"];
$adminVarmi=ClassRegistry::init('Admin')->query("select count(*) as admin from admin where user='".$admin["username"]."' and pass='".md5($admin["pass"])."' and aktif='1'");
if($adminVarmi[0][0]["admin"]>0)
{
$admin=ClassRegistry::init('Admin')->query("select * from admin where user='".$admin["username"]."' and pass='".md5($admin["pass"])."' and aktif='1'");
$this->Session->write("login",true);
$this->Session->write("admin",$admin[0]["admin"]);
$this->redirect("/admin/firmadd");
}
else
{
$this->redirect("/admin");
}
}
en uzun ve işlevi olan fonsiyonumuzda login fonksiyonu burada ilk etapta
$admin=$this->data["admin"];
ile forma yazılan değerleri $admin dizimize atıyoruz sonra [/php] $adminVarmi=ClassRegistry::init(‘Admin’)->query(“select count(*) as admin from admin where user=’”.$admin["username"].”‘ and pass=’”.md5($admin["pass"]).”‘ and aktif=’1′”);[/php] ile veritabanında admin varmı diye kontrol ediyoruz ClassRegistry::init kullandım başka isimli bir controllerdanda işlem yapabilmek için ve query methodunu kullandım find ile de yapılabilir sorgudan da anlaşılabileceği gibi veri tabanında belirttiğimiz kriterlerde admin kaydı varmı diye kontrol yapıyor
if($adminVarmi[0][0]["admin"]>0)
kısmında veri tabanından gelen count değerini kontrol ediyoruz
$admin=ClassRegistry::init('Admin')->query("select * from admin where user='".$admin["username"]."' and pass='".md5($admin["pass"])."' and aktif='1'");
ile veri tabanındaki admin bilfilerinin $admin dizimize çekiyoruz
$this->Session->write("login",true);
ile session a login diye bir değişken atıp içerisine true değerini set
$this->Session->write("admin",$admin[0]["admin"]);
ile veritabanından gelen admin verilerini yine session da admin keyinin altına set ediyoruz ve sayfamızı
$this->redirect("/admin/firmadd");
kodu ile sayfayı giriş yapınca yönlendirilecek sayfaya yönlendiriyoruz (admin controllerin deki firmadd fonksiyonu )
$this->redirect("/admin");
komutu eğer veri tabanonda admin kaydı yoksa sayfayı admin controller ındaki index fonksiyonuna hyönlendiriyoruz yani
$this->layout = "../layouts/adminpanel/login";
olan fonksiyona ve karşımıza yeniden login formu çıkıyor
çıkış yapmak içinse admin kontroller ına
function logout()
{
$this->Session->destroy();
$this->redirect("/admin");
}
şeklinde bir fonksiyon tanımlıyoruz bu kodlarda session daki dataları silip sessionu sonlandırıp sonra yine admin controller ındaki index fonksiyonuna yönlendiriyor
bu fonksiyonu da index.ctp yani admin dosyaları için oluşturduğumuz layout da kullanıyoruz <a href=”/admin/logout”>Logout</a> şeklinde.

Bu Yazıyı Caner Türkmen Yazdı.




