Ayarlar

İlk yapacağımız yapılandırmalar;

- Veritabanı
- Kullanıcı oturum verilerini depolama
- Kullanıcı tablosu
- Beni hatırla (Remember Me)

Örnek yapılandırma:

Glad::setup([
    'fields' => [
        'identity' => ['username','email'], 
        'password' => 'password'
    ],
    'repository' => [
        'session'  => [
            'path'   => '/',
            'type'   => 'serialize',
            'name'   => 'SESSIONID',
            'prefix' => 'ses_',
            'crypt'  => false,
            'timeout'=> 1800
        ]
    ],
    'provider' => [
        'SessionHandlerInterface' => 'Glad\Driver\Repository\NativeSession\Session'
    ],
    'services' => [
        'db' => new \PDO('mysql:host=localhost;dbname=dbName', username, password)
    ],
    'remember' => [
        'enabled'   => true,
        'cookieName'=> 'glad',
        'lifetime'  => (3600*5),
        'field'     => 'remember_token'
    ],
    'cost'   => 8,
    'secret' => '[key]'
]);

Üye tablosu ayarları

Name Value
idenity string/array
password string

Kullanıcı tablosunda mutlaka eklemeniz gereken bazı alanlar var.

Birincisi kullanıcının giriş yaparken kullanacağı email yada username alanı. Bu alan birden fazla olabilir.

Not:

Kullanıcının giriş yaparken aynı anda hem eposta adresi hemde bir kullanıcı adı ile giriş yapmasını isteyebilirsiniz. Yada her her ikisinden en az biriyle giriş yapmasınıda isteyebilirsiniz.

Örnek tanımlama:

'fields' => [
    'identity' => ['username','email'], 
    'password' => 'password'
]

Database Adapter

Glad auth projenizde kullancağınız veritabanı seçimlerinde iki farklı yol sunmaktadır.

  1. PDO driver
  2. DatabaseAdapterInterface

PDO Driver

Birinci yol PDO driver'ı kullanmak. Ayalarınızda PDO instance'ı servisler de tanımlamanız gerekmektedir.

'services' => [
    'db' => new \PDO('mysql:host=localhost;dbname=exampleDb', username, password)
]

DatabaseAdapterInterface

İkinci yol ise adapter yöntemi ile dilediğiniz veritabanını kullanma imkanınız bulunuyor.

Not:

Bazı framework'ler için bununla ilgili yazılmış örnekler mevcut. Şayet bir framework içinde kullanıyorsanız bu paketi mutlaka göz atmalısınız. Örnekler için tıklayınız

İlk olarak yapmanız gereken sınıfınızı DatabaseAdapterInterface implemente etmek. Sonrasında DatabaseAdapterInterface'de sunulan methodları projenizde kullanmak istediğiniz veritabanı sistemine entegre ediniz.

Dikkat etmeniz gereken konu methodların return'leri mutlaka Glad Auth ile uyumlu olmalıdır. Aksi takdirde hatalar ile karşılaşabilirsiniz.

Aşağıda örnek bir kullanım bulunuyor.

Örnek Kullanım:

use Glad\Interfaces\DatabaseAdapterInterface;

class OrnekClass implements DatabaseAdapterInterface
{
    /**
     * Create new user
     *
     * @var $credentials array
     *
     * @return bool|int
     */
    public function gladInsert(array $credentials)
    {
        // your way...
    }

    /**
     * Update user
     *
     * @var $credentials array
     * @var $where array
     * @return bool
     */
    public function gladUpdate(array $where, array $credentials)
    {
        // your way...
    }

    /**
     * Get user identity details by identity
     *
     * @var $identity string
     * @return array
     */
    public function getIdentity($identity)
    {
        // your way...
    }

    /**
     * Get user identity details by user id
     *
     * @var $userId int
     * @return array
     */
    public function getIdentityWithId($userId)
    {
        // your way...
    }
}

Arayüzün bulunduğu dizin:

Glad\Interfaces\DatabaseAdapterInterface

Arayüz önizleme:

<?php

namespace Glad\Interfaces;

/**
 * User model adapter interface
 *
 * @author Ahmet ATAY
 * @category DatabaseAdapterInterface
 * @package Glad
 * @copyright 2015
 * @license http://opensource.org/licenses/MIT MIT license
 * @link https://github.com/atayahmet/glad
 */
interface DatabaseAdapterInterface {

    /**
     * Data insert
     *
     * @param array $credentials
     *
     * @return bool
     */ 
    public function gladInsert(array $credentials);

    /**
     * Data update
     *
     * @param array $where
     * @param array $newData
     * @param integer $limit
     *
     * @return bool
     */ 
    public function gladUpdate(array $where, array $credentials);

    /**
     * Get the user identity
     *
     * @param array $identity
     *
     * @return array
     */
    public function getIdentity($identity);

    /**
     * Get the user identity with user id
     *
     * @param mixed $userId
     *
     * @return array
     */
    public function getIdentityWithId($userId);
}

Tanımlama:

'services' => [
    'db' => new OrnekClass
]

Beni Hatırla (Remember Me)

Üyelik sistemlerinin vazgeçilmezi Beni Hatırla yöntemini bir kaç ayar ile hızlıca faaliyete sokabilirsiniz.

Aşağıda bu ayarlarla ilgili tabloyu görüyorsunuz:

Name Value Description
enabled true/false Aktif/Pasif durumunu belirler
cookieName string Oturum verilerinin yazılacağı çerez adı
lifetime timestamp integer Çerez yaşam süresi
field string Kullanıcı tablosunda anahtarın yazılacağı alan adı

Örnek tanımlama:

'remember' => [
    'enabled'   => true,
    'cookieName'=> 'glad',
    'lifetime'  => (3600*5),
    'field'     => 'remember_token'
]

cost

Kullanıcı giriş parolaları güvenlik adına şifrelenmektedir. Bu şifreleme php deki password_hash fonksiyonu ile yapılmaktadır.

Cost değerinin yüksek olması sunucu performansını ciddi anlamda etkileyebilir. Bu konu hakkında detaylı bilgiye şu linkten ulabilirsiniz: password_hash

Varsayılan cost: 5

Tanımlama:

'cost' => 5

secret

Secret key güvenlik adına şifreleme işlemleri için bir çok alanda kullanılmaktadır. Burada mutlaka kendi Secret key'inizi oluşturmalısınız.

Tanımlama:

'secret' => '_|()44?'

Aşağıdaki tabloda şifreleme mimarisini bulabilirsiniz:

Name Value
MCRYPT_RIJNDAEL_128 Algoritma
MCRYPT_MODE_ECB Şifreleme modu

Detalı bilgi için: PHP Mcrypt

Sub domain kullanıyorsanız eğer bu parametreye bunu tanımlamanız gerekmektedir. Kullanmıyorsanız boş bırakabilirsiniz.

'domain' => 'sub.domain.com'

Session Repository

PHP projelerde üyelik sistemleri genelde native session kullanmaktadır. Orta halli projelerde bu yöntem iş görebilmektedir.

Fakat daha yoğun sistemlerde native session yetersiz kalabilir. Bu gibi durumlarla karşılaşıldığında tercih edilen bazı yöntemlere örnek olarak şunlar verilebilir:

  • Memcache
  • Redis
  • Mongo
  • Database

Glad Auth içinde default olarak gelen yöntemler: - PHP Native Session - Memcache

Fazlası elbette mümkün, Glad Provider yardımıyla dilediğiniz ön bellekleme yöntemlerini kullanabilirsiniz.

Sırasıyla default yöntemleri inceleyelim:

PHP Session

Parametreler:

Name Value Description
path string Oturum bilgilerinin depolanacağı dizin
type string Veri serileştirme türü (default: serialize)
name string Çerez adı (default: SESSIONID)
timeout timestamp integer Oturum yaşam süresi (default: 30 dk.)
crypt boolean Verilerin şifrelenmesi (default: false)
prefix string Oturum dosyası ön adı (default: ses_)

Provider:

Interface Class
SessionHandlerInterface Glad\Driver\Repository\NativeSession\Session

Serileştirme türleri:

Name Description
json encode/decode
serialize Php Serialize

Örnek tanımlama:

'repository' => [
    'session'  => [
        'path'    => '/path/storage',
        'type'    => 'json',
        'name'    => 'PHPSESSID',
        'timeout' => 1800,
        'crypt'   => false,
        'prefix'  => 'ses_'
    ]
],
'provider' => ['SessionHandlerInterface' => 'Glad\Driver\Repository\NativeSession\Session']

Memcache

Parametreler:

Name Value Description
host string Memcache sunucu ip (default: 127.0.0.1)
port integer Memcache sunucu port (default: 11211)
name string Çerez adı (default: SESSIONID)
timeout timestamp integer Oturum yaşam süresi (default: 30 dk.)
crypt boolean Verilerin şifrelenmesi (default: false)
prefix string Oturum dosyası ön adı (default: ses_)

Provider:

Interface Class
SessionHandlerInterface Glad\Driver\Repository\Memcache\Memcache

Örnek tanımlama:

'repository' => [
    'memcache'  => [
        'host'    => '127.0.0.1',
        'port'    => 11211,
        'timeout' => 1800,
        'prefix'  => 'ses_',
        'crypt'   => false,
        'name'    => 'PHPSESID'
    ]
],
'provider' => ['SessionHandlerInterface' => 'Glad\Driver\Repository\Memcache\Memcache']

Memcached

Parametreler:

Name Value Description
host string Memcache sunucu ip (default: 127.0.0.1)
port integer Memcache sunucu port (default: 11211)
name string Çerez adı (default: SESSIONID)
timeout timestamp integer Oturum yaşam süresi (default: 30 dk.)
crypt boolean Verilerin şifrelenmesi (default: false)
prefix string Oturum dosyası ön adı (default: ses_)

Provider:

Interface Class
SessionHandlerInterface Glad\Driver\Repository\Memcached\Memcached

Örnek tanımlama:

'repository' => [
    'memcached'  => [
        'host'    => '127.0.0.1',
        'port'    => 11211,
        'timeout' => 1800,
        'prefix'  => 'ses_',
        'crypt'   => false,
        'name'    => 'PHPSESID'
    ]
],
'provider' => ['SessionHandlerInterface' => 'Glad\Driver\Repository\Memcached\Memcached']