Jednoduché API ve frameworku Slim 4 – č. 11 Endpointy pouze pro přihlášené uživatele
- Jednoduché API ve frameworku Slim 4 – č. 1 Instalace
- Jednoduché API ve frameworku Slim 4 – č. 2 Základní CRUD
- Jednoduché API ve frameworku Slim 4 – č. 3 Struktura API a připojení k databázi
- Jednoduché API ve frameworku Slim 4 – č. 4 Testování funkcionality našeho malého API
- Jednoduché API ve frameworku Slim 4 – č. 5 Vylepšení UserControlleru
- Jednoduché API ve frameworku Slim 4 – č. 6 Přidání Model a Repositories
- Jednoduché API ve frameworku Slim 4 – č. 7 Validace dat
- Jednoduché API ve frameworku Slim 4 – č. 8 Přidáme si do datbáze produkty
- Jednoduché API ve frameworku Slim 4 – č. 9 Přidání zboží uživatelům
- Jednoduché API ve frameworku Slim 4 – č. 10 Autentizace uživatele
- Jednoduché API ve frameworku Slim 4 – č. 11 Endpointy pouze pro přihlášené uživatele
- Jednoduché API ve frameworku Slim 4 – č. 12 Testování našeho API
- Jednoduché API ve frameworku Slim 4 – č. 13 Úpravy API pro přístup z Vue aplikace
- Jednoduché API ve frameworku Slim 4 – č. 14 Úpravy API pro přístup z Vue aplikace preflight request a token v hlavičce
V minulé části jsme si zprovoznili přihlášení do našeho API a ještě zbývá zpřístupnit některé endpointy poue pro přihlášené uživatele.
Takže nejprve si upravím routy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
return function (App $app) { $app->post('/api/login', [AuthController::class, 'login']); $app->post('/api/register', [AuthController::class, 'register']); $app->group('/api', function ($group) { $group->get('/users', [UserController::class, 'getAll']); $group->get('/users/{id}', [UserController::class, 'getOne']); $group->post('/users', [UserController::class, 'create']); $group->put('/users/{id}', [UserController::class, 'update']); $group->delete('/api/users/{id}', [UserController::class, 'delete']); $group->get('/products', [ProductController::class, 'getAll']); $group->get('/products/{id}', [ProductController::class, 'getOne']); $group->post('/products', [ProductController::class, 'create']); $group->put('/products/{id}', [ProductController::class, 'update']); $group->delete('/products/{id}', [ProductController::class, 'delete']); $group->post('/users/{user_id}/products', [UserProductController::class, 'assignProducts']); $group->get('/users/{user_id}/products', [UserProductController::class, 'getUserProducts']); $group->delete('/users/{user_id}/products/{product_id}', [UserProductController::class, 'removeProduct']); $group->post('/logout', [AuthController::class, 'logout']); })->add(AuthMiddleware::class); }; |
a samozřejmě si musíme vytvořit AuthMiddleware
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<?php namespace App\Middleware; use App\Service\AuthService; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface as RequestHandler; class AuthMiddleware implements MiddlewareInterface { private AuthService $authService; public function __construct(AuthService $authService) { $this->authService = $authService; } public function process(Request $request, RequestHandler $handler): Response { $publicPaths = ['/api/login', '/api/register']; if (in_array($request->getUri()->getPath(), $publicPaths)) { return $handler->handle($request); } $authToken = $request->getCookieParams()['auth_token'] ?? null; if (!$authToken) { return $this->respondWithError('Unauthorized', 401); } $user = $this->authService->validateToken($authToken); if (!$user) { return $this->respondWithError('Invalid or expired token', 401); } // Přidání user data do requestu $request = $request->withAttribute('user', $user); return $handler->handle($request); } private function respondWithError(string $message, int $status): Response { $response = new \Slim\Psr7\Response(); $response->getBody()->write(json_encode([ 'success' => false, 'message' => $message ])); return $response ->withHeader('Content-Type', 'application/json') ->withStatus($status); } } |
a nyní již budou naše enpointy zabezepečny, takže nepřihlášený uživatel je nebude moci využít.