Eki
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.

Caner Türkmen Hakkında

Yorum Yaz