[[oktatas:web:back-end_framework:leaf|< Leaf]]
====== Azonosítás ======
* **Szerző:** Sallai András
* Copyright (c) 2024, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Függőség telepítése =====
leaf install auth
Vagy composer paranccsal:
composer require leafs/auth
===== Adatbázis =====
Szükségünk van egy users nevű táblára.
==== MariaDB ====
MariaDB esetén:
create table users(
id int not null primary key auto_increment,
username varchar(50),
email varchar(50),
password varchar(250),
created_at timestamp,
updated_at timestamp
);
Lehetséges változtatás:
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
A Leaf program használata során meg kell adnunk a formátumot.
$auth->config('TIMESTAMP_FORMAT', 'YYYY-MM-DD HH:mm:ss');
==== SQLite ====
create table users(
id integer not null primary key autoincrement,
username text,
email text,
password text,
enabled integer,
created_at text,
updated_at text
);
SQLite esetén nem szükséges a dátumformátum beállítása.
===== Kapcsolódás adatbázishoz =====
==== MariaDB ====
$auth->connect('localhost', 'dbname', 'username', 'titok', 'mysql');
==== SQLite ====
$auth->connect('', 'database.db', '', '', 'sqlite');
===== Regisztráció =====
$auth = new Leaf\Auth;
$auth->register([
'username' => 'dani',
'email' => 'dani@zold.lan',
'password' => 'titok'
]);
==== Útvonallal ====
$app = new Leaf\App;
$auth = new Leaf\Auth;
$auth->connect('localhost', 'pad', 'pad', 'titok', 'mysql');
$auth->config('TIMESTAMP_FORMAT', 'YYYY-MM-DD HH:mm:ss');
$app->post('/register', function() use($app, $auth) {
$username = request()->get('username');
$email = request()->get('email');
$password = request()->get('password');
$data = $auth->register([
'username' => $username,
'email' => $email,
'password' => $password
]);
if($data) {
$msg = $data;
}else {
$msg = $auth->errors();
}
$app->response()->json($msg);
});
===== Belépés =====
$auth->login([
'email' => 'dani@zold.lan',
'password' => 'titok'
]);
===== Útvonallal =====
$app->post('/login', function() use($app, $auth) {
$email = request()->get('email');
$password = request()->get('password');
$data = $auth->login([
'email' => $email,
'password' => $password
]);
if($data) {
$msg = $data;
}else {
$msg = $auth->errors();
}
$app->response()->json($msg);
});
===== Útvonalak védelme =====
$app->get('/employees', function() use($app, $db, $auth) {
$user = $auth->user();
if($user) {
$emps = $db->query('select * from employees')->all();
$app->response()->json($emps);
}else {
$app->response()->json(['Hiba!' => 'Nem vagy bejelentkezve']);
}
});
Bővebb információval, visszatérési érték megadásával:
$app->get('/employees', function() use($app, $db, $auth) {
$user = $auth->user();
if($user) {
$emps = $db->query('select * from employees')->all();
$app->response()->json($emps);
}else {
$app->response()->json([
"error" => "Unauthorized",
"data" => $auth->errors()
], 401);
}
});
===== Egyszerűsítés köztes szoftverrel =====
$prot = function() use($app, $auth) {
$user = $auth->user();
if(!$user) {
$app->response()->json([
"error" => "Unauthorized",
"data" => $auth->errors()
], 401);
exit();
}
};
$app->get('/employees', ['middleware' => $prot, function() use($app, $db, $auth) {
$emps = $db->query('select * from employees')->all();
$app->response()->json($emps);
}]);
==== Elnevezett middleware ====
$app->registerMiddleware('prot', function() use($app, $auth) {
$user = $auth->user();
if(!$user) {
$app->response()->json([
"error" => "Unauthorized",
"data" => $auth->errors()
], 401);
exit();
}
});
$app->get('/employees', ['middleware' => 'prot', function() use($app, $db) {
$emps = $db->query('select * from employees')->all();
$app->response()->json($emps);
}]);
==== Legjobb változat ====
$app->registerMiddleware('auth', function() use($app, $auth) {
$user = $auth->user();
if(!$user) {
$app->response()->exit([
"error" => "Unauthorized",
"data" => $auth->errors()
], 401);
}
});
$app->get('/employees', ['middleware' => 'auth', function() use($app, $db) {
$emps = $db->query('select * from employees')->all();
$app->response()->json($emps);
}]);
==== Csoportos megadás ====
A hivatalos weboldalon hibás mintakód van fent. A group() metódusnak kell egy útvonal is.
Ez nálam '/' lett.
https://leafphp.dev/modules/auth/protecting-your-routes.html#using-middleware
$app->registerMiddleware('auth', function() use($app, $auth) {
$user = $auth->user();
if(!$user) {
$app->response()->exit([
"error" => "Unauthorized",
"data" => $auth->errors()
], 401);
}
});
$app->group('/', ['middleware' => 'auth', function () use($app, $db, $auth){
$app->get('/employees', function() use($app, $db) {
$emps = $db->query('select * from employees')->all();
$app->response()->json($emps);
});
}]);