Kullanıcı Kütüphanesi
"Libraries/ dizini içine taşınan veya bu dizinde oluşturulan kütüphaneler hiç bir tanımlama gerektirmeden kullanılabilir. "
Kullanıcılar veya üyelerle ilgili bir takım işlemlerin yapıldığı sınıftır. Yeni üyelik, siteye giriş, aktivasyon, üye bilgilerini kullanma gibi işlevleri vardır.
# Kurulum
ZN dağıtımları için kurulum gerekmez.
↓ composer require znframework/package-authentication
# Yapılandırma
User kütüphanesi veritabanı ile çalıştığı için ilgili veritabanı tablosuna ait ilgili kolonların kütüphaneye bildirilmesi gerekir. Bu kütüphane ile ilgili ayarlar aşağıdaki dosyalarlarda yer alır.
User | ||||||||
$encode = 'super' |
Bu ayar kullanıcıların kayıtları sırasında kullandıkları şifrelerin hangi algoritma ile tekrardan şifreleneceğini belirtir. Ön tanımlı olarak super algoritması kullanılmaktadır. Bunun yerine isterseniz md5, sha1 gibi şifreleme algoritmaları da seçebilirsiniz. Tavsiye edilen algoritma super algoritmasıdır. Çünkü bu algoritma proje için belirlenen anahtara göre farklılık göstermektedir. Bu farklılık nedeni ile farklı domainlerde aynı kullanıcı adı ve şifre ile giriş yapılamayacaktır. Bunun için Config/Project.php yapılandırmasında yer alan key anahtarının değerini tahmin edilemez sabit bir değer ile değiştirebilirsiniz. Bu key değişimini yapmasanız dahi sistem her bir proje için farklı anahtar üretecektir. | |||||||
$spectator = '' | Kullanıcı hesaplarında gezinmeye izin verir. Bu değere atanacak özel şifre ile istenilen kullanılıcı hesabına giriş yapılmasını sağlar. | |||||||
$matching | User kütüphanesinin kullanıcı işlemlerini gerçekleştirebilmesi için kullanıcı ile ilgili bilgilerin tutulacağı tablo ve kolon bilgilerine ihtiyacı vardır. Bu bölümde User:: kütüphanesinin belirtilen yapılandırmalar için hangi tablo ve kolonları kullanacağı bildirilmektedir. | |||||||
$table | Kullanıcı işlemleri için hangi tablonun kullanılacağı belirtilir. | |||||||
$columns | User:: kütüphanesinin arkaplanda işlemleri gerçekleştirebilmesi için bazı kullanıcı tablosuna ait kolon isimlerine ihtiyacı vardır. Burada yapılan kullanıcı tablosuna ait kolonları oluşturmak değil var olan kullanıcı tablosunda yer alan kolonlardan bu yapılandırma için gerekli olanları eşleştirmektir. | |||||||
$username | Kullanıcı adı bilgisinin tutulacağı kolon adı buraya belirtilir. Bu tanımlama zorunludur. Kolon türü varchar(x)zorunlu | |||||||
$password | Kullanıcı şifre bilgisinin tutulacağı kolon adı buraya belirtilir. Bu tanımlama zorunludur. Kolon türü varchar(x) | |||||||
$email = '' | Kullanıcı e-posta bilgisinin tutulacağı kolon adı buraya belirtilir. Kolon türü varchar(x) | |||||||
$active = '' | Kullanıcıların online olup olmadığı bilgisinin tutulacağı kolon adı buraya belirtilir. Kolon türü int(1) Kolon değeri 1 ise kullanıcı aktif 0 ise değil. | |||||||
$banned = '' | Kullanıcıların banlı olup olmadığı bilgisinin tutulacağı kolon adı buraya belirtilir. Kolon türü int(1) Kolon değeri 1 ise kullanıcı banlı 0 ise değil. | |||||||
$activation = '' | Kullanıcı kayıt işleminden sonra aktivasyon yaptırılması için kullanıcının aktivasyon yapıp yapmadığı bilgisinin tutulacağı kolon adı buraya belirtilir. Bu değerin tanımlanması durumunda User::register() yönteminin 3. parametresine dönüş linki tanımlamak gerekir. Kolon türü int(1) Kolon değeri 1 ise kullanıcı aktivasyon yapmış 0 ise yapmamış. | |||||||
$verification = '' |
Şifremi unuttum uygulaması için e-posta'nın işlemi gerçekleştiren kişiye ait olup olmadığını doğrulama bilgisinin tutulacağı kolon adı buraya yazılır. Kolon türü varchar(x) | |||||||
$otherLogin = [] |
Kullanıcıların kullanıcı adı kolonu dışında başka kolonları kullanarak da giriş yapabilmesi istendiği durumlarda kullanıcı adı dışında hangi kolonla giriş yapılacağıyla ilgili kolon adı buraya yazılır. | |||||||
$joining | Kullanıcı bilgileri birden fazla tabloda tutulacak şekilde tasarlanmışsa ve bu tablolar ile de bağlantı kurulmak isteniyorsa bu diğer tablolarla ilişki kurmak için kullanılır. | |||||||
$column = '' | $table anahtarına tanımlı olan tablonun diğer tablolarla ilişki kurulacak kolon bilgisi. Bu değer için genellikle 'ID' kolonu tanımlanır. | |||||||
$tables = [] |
İlişki kurulacak diğer tablo ve kolon isimleri anahtar değer çifti olarak diziye belirtilir. Örnek: ['AccountProfiles' => 'AccountID', 'AccountAddresses' => 'AccountID'] |
|||||||
$emailSenderInfo | Kullanıcı işlemlerinde aktivasyon, doğrulama gibi e-posta gönderime neden olan kullanımlarda ön tanımlı olarak gönderici ismi ve e-posta adresi belirtilir. | |||||||
$name = '' | Ön tanımlı gönderici adı. | |||||||
$mail = '' | Ön tanımlı gönderici e-posta adresi. |
'encode' => 'super',
'spectator' => '',
'matching' =>
[
'table' => 'users',
'columns' =>
[
'username' => 'user',
'password' => 'pass',
'email' => 'mail',
'active' => '',
'banned' => '',
'activation' => 'activation',
'verification' => '',
'otherLogin' => ['phone']
]
],
'joining' =>
[
'column' => 'id',
'tables' => ['addresses.user_id']
],
'emailSenderInfo' =>
[
'name' => 'Company Name',
'mail' => '[email protected]'
]
Şifreleme algoritması olarak super seçilmesi durumunda bu algoritmanın bir parçasını oluşturan proje anahtarının varsayılan değeri domain ve proje adına göre farklılık gösterdiğinden geliştirilen bir projenin farklı bir domaine taşınması veya domain adının değişmesi durumunda mevcut projede oluşturulan kullanıcı şifreleri geçerliliğini kaybedecektir. Böyle bir durumun önüne geçmek için aşağıda yer alan değere projeye özel herhangi bir proje anahtarı belirleyin.
'key' => '$19a04��1d4x#1d' # Projeye özel bir herhangi bir dizge tercih edebilirsiniz.
Konsol üzerinden 64 karakterli rasgele proje anahtarı oluşturulmasını sağlayabilirsiniz.
php zerocore generate-project-key
# Yöntemler
# Register
Kullanıcı bilgilerinin, yapılandırma dosyasında yer alan 'table' ayarına belirtilen tabloya kayıt edilmesi için kullanılır. Register yönteminin 1. parametresine ilgili tabloya eklenecek veriler dizi türünde belirtilir.
Parametreler
mixed $data | Kaydedilecek kullanıcı bilgileri. | ||
5.8.1.7 | Bu güncellemede oto eşleştirme özelliği getirilmiştir. Bu parametreye 'post', 'get' veya 'request' değerlerinden birini form gönderim türüne göre vererek formdan gelen inputların isimleri ile kolonların oto eşleştirilmesini sağlayabilirsiniz. | ||
mixed $autoLogin = false |
Kayıttan sonra otomatik giriş yapılsın mı? Link bilgisi de içerebilir. | ||
string $returnLink = NULL |
Aktivasyon dönüş linki. Eğer aktivasyon için yapılandırmada kolon tanımlaması yapılmışsa bu parametre kullanılmak zorundadır. | ||
return bool |
Opsiyonel Yöntemler
Kullanımlar
<?php namespace Project\Controllers;
use User, Post;
class Accounts
{
public function register()
{
if( Post::submit() )
{
User::register
(
[
'username' => Post::username(),
'password' => Post::password(),
'usermail' => Post::email(),
'address' => Post::address(),
'phone' => Post::mobilePhone()
],
'users/login'
);
}
}
}
Yukarıda kullanıcı kayıt işleminden sonra 2. parametrede belirtilen users/login sayfasına yönlenmesini istemiş olduk.
User::register() yönteminin 1. parametresine oto eşleşme özelliği de bulunmaktadır. Formdan gelen input nesnelerinin isimleri kullanıcı tablosunun kolon isimleri ile aynı belirtilirse form gönderim yöntemine göre otomatik eşleşme yapılır.
Kullanılabilir Seçenekler
post | Gönderim türü post ise. |
get | Gönderim türü get ise. |
request | Gönderim türü post veya get türlerinden herhangi biri ise. |
User::register('post'); # post, get veya request
Eğer birleştirilmiş tablolar varsa üye kayıt işlemini aşağıdaki gibi yapılmalıdır.
User::register
([
'table1' => ['column1' => 'value1', ...],
'table2' => ['column1' => 'value2', ...]
]);
Otomatik giriş yapılmasını istersek 2. parametreyi true olarak ayarlamamız gerekir. Hem oto giriş hem de sayfa yönlendirmesi için aşağıdaki gibi kullanılmalıdır.
User::register
([
'username' => Post::username(),
'password' => Post::password()
], true);
if( User::isLogin() )
{
redirect('profile');
}
# Login
Kullanıcıların giriş yapmaları için kullanılır.
Parametreler
string $user | Kullanıcı adı. | |
string $password | Kullanıcı şifresi. | |
mixed $rememberMe = false | Beni hatırla? Bu parametre true ayarlanırsa sonraki giriş otomatik olarak yapılacaktır. | |
return bool |
Opsiyonel Yöntemler
username(string $username) : this | 1. parametre yerine kullanılabilir. |
password(string $password) : this | 2. parametre yerine kullanılabilir. |
remember(mixed $remember) : this | 3. parametre yerine kullanılabilir. |
Kullanımlar
$status = User::login(Post::username(), Post::password(), Post::rememberMe());
if( $status === true )
{
redirect(URL::prev());
}
# IsLogin
Kullanıcının giriş yapıp yapmadığı kontrol etmek için kullanılır.
Parametreler
return bool |
Kullanımlar
if( User::isLogin() )
{
echo 'Hi, User';
}
# Data
Giriş yapmış kullanıcıya ait kullanıcı bilgilerini dizi türünde verir.
Parametreler
string $tbl = NULL | Tablo adı. Birleştirilmiş tablolar ile çalışılıyorsa bu parametre kullanılır. | |
return object |
Kullanımlar
$data = User::data();
output([$data->username, $data->email]);
Eğer birleştirilmiş kullanıcı tabloları kullanılıyorsa 1. parametreye hangi tablodan verilerin alınmak istendiği belirtilir.
$profile = User::data('user_profile');
$user = User::data('users');
output([$user->username, $profile->address]);
Istanbul/Turkey
# Logout
Kullanıcı çıkışı yapmak için kullanılır.
Parametreler
string $redirect = NULL | Yönlendirilecek adres. | |
int $time = 0 | Yönlendirilme süresi. |
Kullanımlar
User::logout(URL::prev(), 2);
# Update
Giriş yapan kullanıcıların eski şifresi ile şifre bilgileri ve mevcut diğer bilgilerini güncellemeleri için kullanılır.
Parametreler
string $oldPassword | Mevcut şifre. | |
string $newPassword | Yeni Şifre. | |
string $newPassword = NULL |
Yeni şifre tekrar. İsteğe bağlıdır. Bu parametre NULL belirtilirse 2. parametre ile eşleştirilmiş kabul edilir. | |
array $otherData = [] | Şifre güncellemesi dışında diğer kullanıcı bilgilerinin güncellenmesi de isteniyorsa belirtilir. | |
return bool |
Opsiyonel Yöntemler
oldPassword(string $oldPassword) : this | 1. parametre yerine kullanılabilir. |
newPassword(string $newPassword) : this | 2. parametre yerine kullanılabilir. |
passwordAgain(string $passwordAgain) : this | 3. parametre yerine kullanılabilir. |
column(string $columnName, string $value) : this | 4. parametre yerine kullanılabilir. |
Kullanımlar
Sadece şifre güncellenmesi istenirse;
User::update(Post::oldPassword(), Post::newPassword());
Şifre ile birlikte diğer bilgilerinde güncellenmesi istenirse;
User::update
(
Post::oldPassword(),
Post::newPassword(),
NULL,
[
'name' => Post::name(),
'phone' => Post::phone(),
]
);
gibi kullanılabilir.
Kullanıcı tablosu birleştirilmiş tablolardan oluşuyorsa;
User::update
(
Post::oldPassword(),
Post::newPassword(),
NULL,
[
'users' =>
[
'name' => Post::name(),
'phone' => Post::phone()
],
'user_profile' =>
[
'first_name' => Post::firstName(),
'last_name' => Post::lastName()
]
]
);
gibi kullanılır.
# ForgotPassword
Şifremi unuttum yöntemidir.
Parametreler
string $email | E-posta. | |
string $returnPath | Dönüş linki. | |
string $change = 'before' |
Şifre değişim işleminin e-posta gönderimi sırasında mı yoksa dönüş linki üzerinde mi yapılacağını belirtmek için kullanılır. | |
before | E-posta gönderimi sırasında şifre değiştirilir. | |
after | E-posta ile gönderilen dönüş linkine tıklandıktan sonra gidilen adreste şifre değiştirilir. Bu seçeneğin kullanılması durumunda dönüş linki ile gidilen adreste User::passwordChangeComplete() yönteminin kulanımı ile şifre değiştirme işleminin tamamlanması gerekmektedir. | |
return bool |
Opsiyonel Yöntemler
email(string $email) : this | 1. parametre yerine kullanılabilir. |
returnLink(string $returnLink) : this | 2. parametre yerine kullanılabilir. |
passwordChangeProcess(string $change = 'before') : this | 3. parametre yerine kullanılabilir. |
Kullanımlar
User::forgotPassword(Method::post('email'), 'users/login');
2. parametre şifremi unuttum için gönderilen e-posta da yer alan linktir. Bu linke tıklandığında hangi sayfaya dönülmesi istendiği belirtilir.
User::forgotPassword() yöntemine şifre değiştirme işleminin hangi aşamada yapılacağını belirten 3. bir parametre bulunmaktadır.
Kullanılabilir Seçenekler
before | Şifre değiştirme işlemi e-postanın gönderilmesi aşamasında yapılır. |
after | Şifre değiştirme işlemi e-posta ile gönderilen dönüş linkinde yapılır. Dolayısı ile şifre değişikliği bu aşamaya kadar henüz gerçekleştirilmiş olmaz. Bu işlemin tamamlanabilmesi için User::passwordChangeComplete() yönteminin dönüş linki ile gidilen adreste kullanılması gerekmektedir. Bu yöntem şifre değiştirme işlemini tamamlar. |
User::forgotPassword(Method::post('email'), 'users/passwordChangeComplete', 'after');
Şifre değiştirme işlemini tamamlamak için kullanılır. Bu yönteme User::forgotPassword() yönteminin 3. parametresinin 'after' ayarlanması durumunda ihtiyaç duyulur.
Parametreler
string $redirect = NULL |
Şifremi unuttum işleminin başarılı bir şekilde tamamlanmasından sonra yönlendirme yapmak için kullanılır. Bu yöntem kullanılmazsa işlemin başarılı olma durumuna göre true veya false değer döner. | |
return bool |
Kullanımı
public function passwordChangeComplete()
{
User::passwordChangeComplete('users/login');
}
Yukarıdaki kullanım şifre değiştirme işleminin başarılı olaması durumunda users/login kontrolcüsüne yönlendirme yapar.
Şifremini unuttum işlemi için sadece e-posta bilgisinin kullanılması bazı güvenlik sorunlarına neden olabilir. Bu nedenle e-posta bilgisi dışında 2. bir güvenlik bilgisine daha ihtiyaç duyulur. Bu güvenlik bilgisinin tabloda hangi kolonda tutulacağını yukarıda yapılandırmada yer alan verification yapılandırmasında belirtilir.
User::verification(Post::verification())->forgotPassword(Post::email(), 'users/login');
Yukarıdaki kullanımda formlardan gelen doğrulama bilgisi verification() yöntemi içinde kullanılır. Bu doğrulama bilgisi kullanıcıların profillerinden kendi belirtecekleri bir değer olmalıdır.
# SetForgotPasswordEmail
User::forgotPassword() yöntemi ile birlikte kullanılır. Varsayılan e-posta şablonunu değiştirmek için kullanılır.
Parametreler
string $template |
Gönderilecek e-postanın içeriği. | |
string $subject = NULL |
[6.7.0] Gönderilecek e-postanın konusu. Bu değer boş bırakılırsa varsayılan konu mesajı gönderilir. | |
Değer Yerleştirme | {url} | Kayıt işleminde User::forgotPassword() yönteminin 2. parametresi ile tanımlanan dönüş adresi. |
{user} | Kullanıcı adı bilgisi. | |
{pass} | Kullanıcıya bildirilmesi gereken yeni şifre bilgisi. |
Kullanımlar
$template = 'Merhaba {user}, ';
$template .= 'yeni şifreniz:{pass} ';
$template .= 'işlemi tamamlamak için linke tıklayınız';
User::setForgotPasswordEmail($template)->forgotPassword(Post::email(), 'users/login');
# SendEmailAll
Sistemde kayıtlı kullanıcıların tamamına e-posta gönderimi için oluşturulmuştur.
Parametreler
string $subject | E-posta'nın konusu. |
string $message | E-posta'nın içeriği |
Kullanımlar
User::sendEmailAll('New Topic', 'Added new topic.');
Bu e-posta gönderimine dosya eklemek isterseniz opsiyonel yöntem olaran attachment() yönteminden yararlanabilirsiniz. Yöntemin parametreleri Email::attachment() yöntemi ile bire bir aynıdır.
User::attachment('path/topic.jpg')->sendEmailAll('New Topic', 'Added new topic');
# ActivationComplete
Ayarlardan activation kolonu belirtilmişse ve kayıt yaparken register() yönteminin 3. parametresi ile dönüş linki belirtilmişse bu yöntemden istifade edilebilir. Bu yöntem dönüş linki belirtilen sayfada kullanılmalıdır. Yani e-posta üzerinden gelinmesini istediğiniz sayfada kullanılması gerekir. Böylece belirtilen sayfaya istek yapıldığında kullanıcı aktivasyonu tamamlanmış olur. Bu kolonun tutması gereken değer 0 ve 1 değeri olacak şekilde ayarlanmalıdır.
Parametreler
mixed $getUriKey = 'user' | Aktivasyon için gönderilen e-posta içerisinde yer alan linkin parametre diziliminde değişiklik yapılması durumunda gelen verinin eşleşebilmesi için URI'den gelen kullanıcı bilgisini tutan anahtarın bu parametreye bildirilmesi gerekmektedir. |
mixed $decryptor = 'pass' |
Yukarıdaki durum aynı şekilde geçerli olmakla birlikte e-posta gönderiminde kriptolu şifre bilgisini tutan veri üzerinde ek kriptolama ve çözümleme işlemi için geri çağrım işlevi kullanabilirsiniz. |
Kullanımlar
Dönüş linki ile ziyaret edilecek sayfada kullanılması gereken yöntem.
public function activationComplete()
{
User::activationComplete();
}
Gönderilen ön tanımlı e-posta şablonunda link yapısı aşağıdaki gibidir.
$url . 'user/' . $user . '/pass/' . $pass
Bu dizilim üzerinde değişilik yapılabilir;
$url . 'u/' . $user . '/p/' . $pass
Böyle bir düzenlemeden sonra bu yöntemi aşağıdaki gibi kullanmanız gerekmektedir.
User::activationComplete('u', 'p');
E-posta ile gönderilen linkte kriptolu gönderilen şifrenin daha güvenli bir formda gönderilmesini sağlayabilirsiniz.
$url . 'u/' . $user . '/p/' . base64_encode($pass)
Yukarıdaki gibi bir link gönderiminden sonra eşleşme için geri çağrım işlevi uygulanmalıdır.
User::activationComplete('u', function()
{
return base64_decode(URI::get('p'));
});
# SetActivationEmail [5.7.3]
User::register() yöntemi ile birlikte kullanılır. Eğer activation kolonu ayarlı ise User::register() yöntemi kendi içerisinde bir aktivasyon e-postası gönderir. Varsayılan e-posta şablonunu değiştirmek için kullanılır.
Parametreler
string $template |
Gönderilecek e-postanın içeriği. | |
string $subject = NULL |
[6.7.0] Gönderilecek e-postanın konusu. Bu değer boş bırakılırsa varsayılan konu mesajı gönderilir. | |
Değer Yerleştirme | [ ... ] | Kayıt işleminde User::register() yönteminin 3. parametresi ile tanımlanan aktivasyon dönüş adresi. |
{user} | Dönüş linkinde bulunması gereken kullanıcı adı adı bilgisi. Örn: localhost/user/activation/ | |
{pass} | Dönüş linkinde bulunması gereken kriptolu kullanıcı şifre bilgisi. |
Kullanımlar
$template = 'Click please do activation';
User::setActivationEmail($template)->register
([
'username' => Post::username(),
'password' => Post::password(),
'usermail' => Post::email(),
'address' => Post::address(),
'phone' => Post::mobilePhone()
], 'users/login');
Yukarıdaki örnek e-posta içeriğinde yer alan [user/{user}/pass/{pass}] çıktısı aşağıdakine benzer bir yapıda olacaktır.
# ResendActivationEmail
Aktivasyon e-postasının herhangi bir neden gelmemesi durumunda tekrar gönderim sağlamak için kullanılır.
Parametreler
string $username | Kullanıcı adının e-posta bilgisi içermesi gerekmektedir. Eğer kullanıcı e-posta bilgisi içermiyorsa 3. parametre mutlaka e-posta adresi belirtilmelidir. |
string $returnLink | Aktivasyon e-postasında yer alan linkin href="" değerini ayarlar. Kullanıcı dönüş bağlantısıdır. |
string $email = NULL |
1. parametre yani kullanıcı adı parametresi e-posta özelliği taşımıyorsa bu parametre e-postanın gönderileceği e-posta bilgisini taşımalıdır. |
return bool |
Kullanımlar
User::resendActivationEmail($username, 'profile/activation', $usermail);
# Ip
İstek yapılan IP adresi bilgisini verir. Kullanımı Request::ipv4() ile aynıdır.
Parametreler
return string |
Kullanımı
echo User::ip();
# Agent (Paket[6.1.2][2020-05-29])
Yapılan isteğin HTTP_USER_AGENT bilgisini verir. Kullanımı Http::userAgent() ile aynıdır.
Parametreler
return string |
Kullanımı
echo User::agent();
# Count
Kayıtlı üye sayısını öğrenmek için kullanılır.
Parametreler
return int |
Kullanımlar
echo User::count();
# ActiveCount
Oturum açmış kullanıcıların sayısını verir. Ancak bu yöntemden yararlanılabilmesi için ayarlardan active kolonunun belirtilmesi gerekir. Bu kolonun tutması gereken değer 0 ve 1 değeri olacak şekilde ayarlanmalıdır.
Parametreler
return int |
Kullanımlar
echo User::activeCount();
# BannedCount
Banlanmış kullanıcıların sayısını verir. Ancak bu yöntemden yararlanılabilmesi için ayarlardan banned kolonunun belirtilmesi gerekir. Bu kolonun tutması gereken değer 0 ve 1 değeri olacak şekilde ayarlanmalıdır.
Parametreler
return int |
Kullanımlar
echo User::bannedCount();
# GetEncryptionPassword
User:: kütüphanesinin seçili şifreleme algoritmasına göre parametre olarak belirtilen şifrenin yeniden şifrelenmesini sağlar. Bu yöntem User:: kütüphanesine ek olarak yürüteceğiniz işlemlerde mevcut kullanıcı şifreleri ile ilgili bir çalışma yapmanız durumunda doğru kullanıcı şifresini oluşturmanıza olanak sağlar.
Parametreler
return string |
Kullanımlar
echo User::getEncryptionPassword('1234');
# Success
Kullanıcı işlemlerine yönelik başarı bilgisi döndürür.
Parametreler
return string |
Kullanımlar
echo User::success();
# Error
Kullanıcı işlemlerine yönelik hata bilgisi döndürür.
Parametreler
return string |
Kullanımlar
echo User::error();