PHP ile HTTP Kimlik Doğrulaması

Bazı zamanlar belli bir adrese erişimde kimlik doğrulaması isteyebiliriz. Yani kullanıcı adı ve şifre yazarak sayfayı görüntülemesini. Ancak her zaman bir üyelik sistemimiz olmayabilir, bundan dolayı kimlik doğrulamanın alternatif bir yolunu sizlerle öğrenelim.

Şimdi ilk olarak geçerli olacak kullanıcı adı ve şifremizi belirleyelim.

$username = 'erbilen';
$password = '123123';

Hemen ardından kullanıcıdan alacağımız kullanıcı adı ve şifremizi değişkenlere aktaralım. Bu arada girilen değerleri almak için superglobal $_SERVER değişkenini kullanacağız.

$inputUsername = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : false;
$inputPassword = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : false;

Burada değişkenin varlık kontrolü için isset kullandık ve if/else yapısı yerine Ternary Operatörü ile işimizi hallettik.

Şimdi basit şekilde mevcut kullanıcı adı ve şifremi, girilen kullanıcı adı ve şifre ile eşleşip eşleşmediğini test edeceğim.

$validated = ($inputUsername == $username) && ($inputPassword == $password);

Sonuç olarak $validated değişkenimin değeri, kullanıcı eğer doğru kullanıcı adı ve şifreyi girmişse true değerini, yanlış ya da hiç girmemişse false değerini döndürecektir.

Buna göre de eğer false değeri dönmüş ise, kimlik doğrulaması için kodlarımızı çalıştıracağız.

if (!$validated) {
    header('WWW-Authenticate: Basic');
    header('HTTP/1.0 401 Unauthorized');
    die('Girmek için yetkiniz bulunmuyor!');
}

die() kısmı, kullanıcı adı ya da şifre girilmezse ya da yanlış girilirse kullanıcıya gözükecek alandır. Şimdi bu kodlarla birlikte sayfayı çalıştırdığımızda, şöyle bir görünüm elde edeceğiz ????

Kullanıcı adı ve şifremizi doğru yazdıktan sonra gözükmesi için if kısmının hemen altına birkaç bir şey yazalım.

Hoşgeldin, <b><?= $username ?> </b>

Artık kullanıcı adı ve şifremizi doğru yazdığımızda üstteki yazı gözükecek ve oturum sonlanana kadar giriş yapmış sayılacaksınız ????

Çıkış İşlemi

Bu işlem session gibi çalışmadığından session_destroy() gibi bir metodu da yok ???? Ancak şöyle bir üst bilgi ile çıkışı sağlayabiliriz;

header('HTTP/1.1 401 Unauthorized');

Yani bunu herhangi bir logout.php gibi dosyaya ekleyip çıkış işlemini oraya yönlendirirsek otomatik olarak çıkış yapmış sayılacaktır.

Sınıf haline getirmek

Hızlı ve kolay kullanım için yukarıdaki kodlarımızı hemen basit bir sınıf haline getirelim.

class Auth {

    public static function Login($username, $password)
    {
        $inputUsername = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : false;
        $inputPassword = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : false;
        $validated = ($inputUsername == $username) && ($inputPassword == $password);
        if (!$validated) {
            header('WWW-Authenticate: Basic');
            header('HTTP/1.0 401 Unauthorized');
            die('Girmek için yetkiniz bulunmuyor!');
        }
        return true;
    }

    public static function Logout()
    {
        header('HTTP/1.1 401 Unauthorized');
    }


}

Artık kullanırken şu şekilde bir kullanım ile kolayca kullanabiliriz;

$auth = Auth::Login('erbilen', '123123');
if ( $auth ){
    echo 'Hoşgeldiniz!';
}

Başka bir yazıda görüşmek üzere ????

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir